一、创建与测试Movie对象
class Movie {
String title;
String genre;
int rating;
void playIt(){
System.out.println("Playing the movie");
}
}
public class MovieTestDrive{
public static void main(String[] args){
Movie one = new Movie();
one.title = "Gone with the Stock";
one.genre = "Tragic";
one.rating = -2;
Movie two = new Movie();
two.title = "Lost in Cubicle Space";
two.genre = "Comedy";
two.rating = 5;
two.playIt();
Movie three = new Movie();
three.title = "Byte Club";
three.genre = "Tragic but ultimately uplifting";
three.rating = 127;
}
}
二、逃出main()
快离开main!!!
只要还呆在main中,你就是在对象村外。呆在main()中对于一个测试用的程序来说是好的,但对于货真价实的面向对象来说,你会需要用对象与对象来交互。
main()的两种用途:
1.测试真正的类
2.启动你的Java应用程序
真正的Java应用程序只会让对象与对象交互。此处所说的交互是指相互调用方法。上一页与后面的第4章会讨论在独立的TestDrive类中创建和测试其他的类。第6章会看到使用带有main()的类来启动真正的Java应用程序(创建对象并让对象之间产生交互)。
现在先给你看个真正Java应用程序会怎么做“预览”,以下是个小范例。因为我们还在学习Java的初级阶段,能够运用的技巧有限,所以程序不太优雅且无效率。你可能会思考如何将它改善,而这正是我们在后续章节所做的事。别担心看不懂某些部分,这个范例的重点在于示范对象如何与对象互动。
public class GuessGame{
Player p1;
Player p2;
Player p3;
public void startGame(){
p1 = new Player();
p2 = new Player();
p3 = new Player();
int guessp1 = 0;
int guessp2 = 0;
int guessp3 = 0;
boolean p1isright = false;
boolean p2isright = false;
boolean p3isright = false;
int targetNumber = (int)(Math.random() * 10);
System.out.println("I'm thinking of a number between 0 and 9...");
while(true)
{
System.out.println(" Number to guess is " + targetNumber);
p1.guess();
p2.guess();
p3.guess();
guessp1 = p1.number;
System.out.println(" Player one guessed " + guessp1);
guessp2 = p2.number;
System.out.println(" Player two guessed " + guessp2);
guessp3 = p3.number;
System.out.println(" Player three guessed " + guessp3);
if(guessp1 == targetNumeber)
{
p1isright = true;
}
if(guessp2 == targetNumber)
{
p2isright = true;
}
if(guessp3 == targetNumber)
{
p3isright = true;
}
if(p1isright || p2isright || p3isright)
{
System.out.println("We have a winner");
System.out.println(" Player one got it right? " + p1isright);
System.out.println(" Player two got it right? " + p2isright);
System.out.println(" Player three got it right? " + p3isright);
System.out.println("Game is over.");
break;
}
else
{
System.out.println(" Players will have to try again.");
}
}
}
}
public class Player{
int number = 0;
public void guess(){
number = (int)(Math.random() * 10);
System.out.println(" I'm guessing " + number);
}
}
pubilc class GameLauncher{
public static void main(String[] args)
{
GuessGame game = new GuessGame();
game.startGame();
}
}
java会拾荒
创建对象时候,它会被存放在称为堆的内存区域中。不管对象如何创建都会放在此区域中。此区域并非普通的堆;它是可回收垃圾的堆。Java会根据对象的大小来分配内存空间。比如15个实例变量的对象所占用的空间就可能会比只有两个实例变量的对象要大。但对象使用完毕时候,内存是如何回收呢?
Java会主动帮你管理内存!!!当某个对象被Java虚拟机察觉不再会被使用到,该对象就会被标记成可回收的。如果内存开始不足,垃圾收集器就会启动来清理垃圾、回收空间,让空间能够再次被利用。后面的章节会对此机制有更多的讨论。
3.primitive 主数据类型和引用
认识变量:
变量有两种:primitive主数据类型和引用。到目前为止你已经在两处使用过变量,--对象的状态(instance variables)与局部(local)变量(声明在方法中的变量)。稍后我们会把变量用于参数,(arguments,传递给方法的值)及返回类型(执行方法所返回的值。)你已经看到过被声明成primitive整数值(int)的变量,以及声明成更为复杂的如:String或数组等类型的东西。但一定还有比这些东西更为复杂的事物。像是PetOwner对象会带有Dog实例变量,或者Car对象带有Engine实例变量。这一章会为你揭开Java类型的谜团,探索变量的声明以及研究如何运用变量等议题。最后还会看到垃圾可回收的堆对你本周运势的影响。
变量必须拥有类型:。另外一条规则就是必须要有名称。int name