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比较的是地址。

 

posted @ 2017-10-18 21:12  但为君故。  阅读(136)  评论(0编辑  收藏  举报