标签:思路 对象 pre ide scanner 创建对象 ges stat return
课后作业一:
使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
设计思路:定义类的构造函数时使静态变量i进行i++,即每构造一次就叠加一个构造的对象数。
程序流程图:
源程序代码:
import java.util.Scanner; public class Test { static int i=0; public Test(){ i++; } public static int getTimes(){ return i; } public static void main(String[] args) { int x=1; Scanner con=new Scanner(System.in); for(;x!=0;){ System.out.print("构建个数(0退出):"); x=con.nextInt(); for(int t=0;t<x;t++){ Testi g=new Test(); } System.out.println("程序已经创建对象的个数为:"+getTimes()); } } }
截图:
课后作业二:
1.这两种方式定义的变量是一样的吗?
Int value = 100;
MyClass obj = new MyClass();
不一样。
int “是原始数据类型”的变量。
定义后,会马上给其分配内存。
MyClass “是对象变量”。
声明一个对象类型变量时,实际没有创建一个对象,变量 = null。
2.对象变量可以用“==”判断两变量值是否相等吗?运行以下代码,得到什么结果?
不可以。判断的不是变量值。
public class Test{ public static void main(String[] args){ Foo obj1 = new Foo(); Foo obj2 = new Foo(); System.out.println(obj1 == obj2); } } class Foo{ int value = 100; }
结果:false
当“==”施加于引用类型变量时,比较的是两个变量是否引用同一个对象。
3.如何比较两个对象“内容”是否一样?
比较“字段值”。可以重写equals()方法。
public class ObjectEquals { public static void main(String[] args) { MyTestClass obj1=new MyTestClass(100); MyTestClass obj2=new MyTestClass(100); System.out.println(obj1==obj2); System.out.println(obj1.equals(obj2)); } } class MyTestClass { public int Value; //注意:只有参数类型为Object的,才是重写了Object的equals方法 //参数类型为MyTestClass的,仅仅是Overload了equals方法。 // @Override // public boolean equals(Object obj) { // return ((MyTestClass)obj).Value==this.Value; // } public boolean equals(MyTestClass obj){ return obj.Value==this.Value; } public MyTestClass(int initValue){ Value=initValue; } }
结果:flase
true
4.总结一下,这个方法有那些“与众不同”之处?
public MyTestClass(int initValue){ Value=initValue; }
这个方法是类的构造方法。它有参数值。
5.以下代码为何无法通过编译?哪出错了?
public class Test{ public static void main(String[] args){ Foo obj1 = new Foo(); } } class Foo{ int value; public Foo(int initValue){ value=initValue; } }
Foo obj1 = new Foo()错误。
标签:思路 对象 pre ide scanner 创建对象 ges stat return
原文地址:http://www.cnblogs.com/luohaochi/p/7697628.html