java类初始化顺序 ----需要研究的
2015-03-21 17:02
141 查看
http://ini.iteye.com/blog/2007835
public class TestStaticCon {
public static int a = 0;
static {
a = 10;
System.out.println("父类的静态代码块在执行a=" + a);
}
{
a = 8;
System.out.println("父类的非静态代码块在执行a=" + a);
}
public TestStaticCon() {
this("父类带参构造方法中a的值:" + TestStaticCon.a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
}
public TestStaticCon(String n) {
System.out.println(n);
System.out.println(a);
}
public static void main(String[] args) {
TestStaticCon tsc = null ;
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
tsc = new TestStaticCon();
}
}
结论:静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。且执行顺序为静态代码块------非静态代码块----构造函数。
public class TestStaticCon {
public static int a = 0;
static {
a = 10;
System.out.println("父类的静态代码块在执行a=" + a);
}
{
a = 8;
System.out.println("父类的非静态代码块在执行a=" + a);
}
public TestStaticCon() {
this("父类带参构造方法中a的值:" + TestStaticCon.a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
}
public TestStaticCon(String n) {
System.out.println(n);
System.out.println(a);
}
public static void main(String[] args) {
TestStaticCon tsc = null ;
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
tsc = new TestStaticCon();
}
}
结论:静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。且执行顺序为静态代码块------非静态代码块----构造函数。
相关文章推荐
- Java:深度理解JAVA本身的构造器及子父类构造方法的初始化顺序
- Java中类初始化的顺序
- java对象初始化顺序
- JAVA类初始化顺序,经典例程
- java学习笔记4:对象的初始化顺序(官方实例)
- Java初始化顺序
- JAVA面试题解惑系列(一)——类的初始化顺序
- Java中静态变量和非静态变量的初始化顺序
- 关于java初始化顺序的一个示例
- Java初始化顺序
- Java中类初始化的顺序
- java中初始化的顺序
- 初始化顺序(Thinking in Java中的一段有意思的例子)
- [java]初始化顺序
- Java程序初始化顺序
- Java中类初始化的顺序
- Java中类初始化的顺序
- JAVA初始化顺序
- java变量初始化顺序
- JAVA面试题解惑系列(一)――类的初始化顺序