static构造函数认识

class Class1{

private static int count=0;

static Class1{

count++;

}

public Class2{

count++;

}

}

Class1 one=new Class1();

Class2 two=new Class2();

问程序执行完之后class1.count的值是多少。很显然,考察的是对static关键字的认识,答案是3.

从程序的执行顺序来说,第一次实例化class1的时候,先走静态构造函数==》普通无参构造函数,执行完后,count的值编程3.

如果此题答案正确,那么请看下面的题。

Class A{

public static int X=B.Y;

static A{

x++;

}

}

Class B{

public static int Y=A.X;

static B(){

Y++;

}

}

A.X表示从此时开始访问A类,执行X=B.Y

此时先给其分配空间,并辅以0来初始化,然后调用对应的成员初始化语句来初始化这个静态成员);

  B.Y表示开始访问B类,执行Y=A.X(此时不是第一次访问类型A,所以不再进行静态成员初始化和静态构造函数的调用),此时,系统默认A.X=0; 既然访问B类,就会执行B类的静态构造函数,B类的构造函数执行完毕,此时Y=1,

  static int X=1,然后执行A类的静态构造函数,执行完毕后,X=2,因此A.X=2。

  B.Y开始实例化B类。 但是B类的静态字段与静态构造函数已经执行了一次,不会再执行第二次A.X执行完毕后,Y已经等于1,因此B.Y=1。

 

  因此,可以了解到静态字段以及静态构造函在类被实例化时的一些特殊点:

  1、静态字段先于静态构造函数被初始化,静态构造函数在一个类中只有一个且不能带有参数;

  2、静态成员初始化语句与静态构造函数在指定的程序域中只会被执行一次,不论这个类被实例化多少次;

  3、对于存在多个static成员,他们的初始化将按照文本顺序进行,不会因为调用顺序而改变。

  

  那么,静态构造函数什么时候会被首次触发呢?

  1、该类的实例被创建;

  2、任何一个static成员被引用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值