不用任何工具求出下面程序的结果
public class Test
{ private int ix = 50;
private Test( int ix)
{ System.out.println(ix); }
static { System.out.println("test2"); }
{ System.out.println("test3"); }
public static void main(String[] args)
{ Test t; t = new Test(1); Test t2; t2 = new Test(2); }
}
结果为:
test2
test3
1
test3
2
静态代码块在类被加载时候执行一次,而非静态代码块在属于对象的,类似于实例变量,在每次新生成一个对象的时候进行初始化。
java中加载一个类的执行过程 1.一般是先执行类中的静态块.再执行类中的普通语句块 也就是上述的{}(非静态块)标识的语句块. 最后加执行构造块. 2.类的静态块只执行一次,而对于{}(非静态块)块,每个对像生成后都会进行初始化.
static main(){} 表示静态方法,
在类加载时 static 优先级高。
所以不管怎样,类加载时:先静态块,再静态(属性/方法);
大括号 {} 标示:创建对象时的初始化快,优先级比构造方法高,
所以,创建对象时:先初始化块,后构造方法;
程序执行过程分为3步:
1.
加载所有 static 初始化块,这里只有一个;
static
{
System.out.println("test2");
}[/color]
输出:test2
2.
先加载所有 [color=#00CCFF]static (方法/属性),后加载所有非 static (方法/属性),
找到 main() 方法;
3.
main() 方法中只创建两个对象,而创建对象时,先初始化块,后构造方法;
Test t = new Test(1); 和 Test t2 = new Test(2);
执行形同的代码块:
{
System.out.println("test3");
}
private Test( int ix){
System.out.println(ix);
}
输出:[/color]
test3
1
test3
2