黑马程序员技术交流社区
标题:
类的初始化顺序
[打印本页]
作者:
亓华森
时间:
2014-4-1 16:25
标题:
类的初始化顺序
public class Test1 {
public static int k=0;
public static Test1 t1=new Test1("t1");
public static Test1 t2=new Test1("t2");
public static int i=print("i");
public static int n=99;
public int j=print("j");
{
print("构造块");
}
static{
print("静态块");
}
public Test1(String str){
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++i;++n;
}
public static int print(String str){
System.out.println((++k)+":"+str+" i="+i+" n="+n);
++n;
return ++i;
}
public static void main(String...strings ){
}
}
输出结果:
1:j i=0 n=0
2:构造块 i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:构造块 i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
复制代码
问题:i和n到底是什么时候声明的,public static Test1 t1=new Test1("t1");这句会去执行构造块和构造方法,但是这时候public static int i=print("i");并没执行,i是哪里出来的?它是按顺序先声明所有变量然后才从头再挨个赋值吗?
一道经典问题,大神们现身吧~
作者:
向阳泪无痕
时间:
2014-4-1 18:30
静态优先存在于内存中,
在这里 public static int print(String str) 方法是静态的,
当你使用 new Test1("t1"); 时候,构造函数会运行,但静态方法已经完成初始化了,
所以这里构造方法里可以使用静态的变量及方法。
作者:
Monkey·D·Chas
时间:
2014-4-1 22:30
类一加载到内存,首先静态代码块先加载 然后是构造代码块。最后才是对象的构造函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2