类中变量 代码块 构造方法 的加载顺序

来源:互联网 发布:电脑防护软件排行 编辑:程序博客网 时间:2024/05/21 17:46
 


通过Java反射API也可能造成类和接口的初始化。需要注意的是,当访问一个Java类或接口中的静态域的时候,只有真正声明这个域的类或接口才会被初始化。考虑下面的代码:

class B {      static int value = 100;      static {             System.out.println("Class B is initialized."); //输出      }}class A extends B {      static {             System.out.println("Class A is initialized."); //不会输出      }}public class InitTest {      public static void main(String[] args) {             System.out.println(A.value); //输出100      }}

在上述代码中,类InitTest通过A.value引用了类B中声明的静态域value。由于value是在类B中声明的,只有类B会被初始化,而类A则不会被初始化。

以下是对类的初始化的一些总结:

1:继承类时会调用父类的Static的成员变量和Static代码块、顺序是按照2个Static代码的先后顺序执行
2:继承情况下,首先是从顶层父类的静态变量和代码块开始执行,依次向下。
3:同一个类中,执行的顺序是依照静态变量和静态代码在类中的编码顺序执行,:变量和代码块无任何优先级之分。
全部继承树中的类静态变量和代码块都初始化完毕后,开始从顶层父类执行非静态的类变量和类代码块初始化,执行顺序同静态,
然后紧接着是执行构造函数,完毕后才向下,执行子类的类变量、代码块和构造函数。 非静态内部类中不能定义类静态代码块和非final的类静态变量;
静态内部类,可以声明非final的静态变量和静态代码块。

 

 

 

 


原创粉丝点击