Java课堂作业03
一 课后作业
使用类的静态字段和构造方法,跟踪类所创建的对象的个数
package test;
public class Findclass
{
static int value=0;
public Findclass()
{
value++;
}
public static void main(String[] args)
{
Findclass num1=new Findclass();
Findclass num2=new Findclass();
System.out.println("你已经创建了"+Findclass .value+"个对象");
}
}
二 动手动脑
java字符段初始化规律:
public class InitializeBlockDemo {
/**
* @param args
*/
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass{
//下面这句在初始化块之前与之后,会影响到field字段的初始值
//public int field=100;
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){
}
}
如果在主函数中创建对象时没有形参,在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数。
如果在主函数中创建对象时有形参,则调用类中对应的构造函数。
静态初始化块的执行顺序:
静态初始化块只执行一次;
先执行父类再执行子类;
创建子类型的对象时,也会导致父类型的静态初始化块的执行。
如何在静态方法中访问类的实例成员
先在静态方法中生成一个对象,用对象访问实例成员
package test;
public class Classtest4
{
static int x=1;
int y=2;
static public void set()
{
Classtest4 a=new Classtest4 ();
System.out.println("id:"+x);
System.out.println("age:"+new Classtest4().y);
}
public static void main(String[] args)
{
Classtest4 .set();
}
}
Integer的“诡异”特性
public class StrangeIntegerBehavior
{
public static void main(String[] args)
{
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1);
Integer i2=129;
Integer j2=129;
System.out.println(i2==j2);
}
}
两对整数完全一样,一个输出true,一个输出false
在用Inter j1=number;时调用了public static Integer valueOf(int i)方法,这个方法对于-128<=i<=127的时候是使用的int原始数据类型,超出这个范围后则创建一个对象。所以i1和j1比较的是数值,i2和j2比较的是地址。