Java类的初始化顺序

来源:互联网 发布:销售数据分析 职业 编辑:程序博客网 时间:2024/05/17 17:54
一:先不考虑继承。一个类中初始化的顺序规则是: 

      (1)静态变量>普通变量>构造器。 

      (2)变量定义的顺序决定初始化的顺序。 

      (3)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是 
              变量。 
public   class D {           /**D的构造器**/         public D(){                System.out.println("D的构造器");             }          /**D静态代码块**/         static{               System.out.println("执行静态代码块");          }                    /**D变量**/          private C c1=new C("变量--(1)");           private C c2=new C("变量--(2)");               /**D非静态代码块**/         {                 System.out.println("执行非静态代码块");          }                    /**D的静态变量**/              private static C c3=new C("静态变量--(3)");           private static C c4=new C("静态变量--(4)");           public static void main(String [] args){                             new D();          }   }  class C{         public C(String s){           System.out.println(s+"------cccccccccccccc");       }   }   

执行静态代码块
静态变量--(3)------cccccccccccccc
静态变量--(4)------cccccccccccccc
变量--(1)------cccccccccccccc
变量--(2)------cccccccccccccc
执行非静态代码块

D的构造器

二:如果有继承的话。那么初始化的顺序规则是:

      (1)父类的初始化>子类的初始化

      (2)静态变量>普通变量>构造器。

      (3)变量定义的顺序决定初始化的顺序。

      (4)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是 
              变量。 

class C{        public C(String s){          System.out.println(s+"------cccccccccccccc");        }   }     class A {         /***构造器***/        public A() {                System.out.println("父类--构造器");         }           /***** 静态变量****/        public static C c3=new C("父类静态变量1");         /***** 静态初始化块****/        static {          System.out.println("父类--静态初始化块");         }         public static C c4=new C("父类静态变量2");           /***** 变量****/        public C c1 = new C("父类--变量1");         /***** 始化块****/        {                System.out.println("父类--初始化块");         }         public C c2 = new C("父类--变量2");                 }            public class B extends A {         /***构造器***/        public B() {                System.out.println("子类--构造器");         }           /***** 静态变量****/        public static C c1=new C("子类静态变量1");         /***** 静态初始化块****/        static {                System.out.println("子类--静态初始化块");         }         public static C c2=new C("子类静态变量2");           /***** 变量****/        public C c3 = new C("子类--变量1");         /***** 始化块****/        {                System.out.println("子类--初始化块");         }         public C c4 = new C("子类--变量2");           public static void main(String[] args) {                new B();         }    }  

父类静态变量1------cccccccccccccc
父类--静态初始化块
父类静态变量2------cccccccccccccc
子类静态变量1------cccccccccccccc
子类--静态初始化块
子类静态变量2------cccccccccccccc
父类--变量1------cccccccccccccc
父类--初始化块
父类--变量2------cccccccccccccc
父类--构造器
子类--变量1------cccccccccccccc
子类--初始化块
子类--变量2------cccccccccccccc
子类--构造器

注:父类静态变量->子类静态变量->父类实例变量->父类构造器->子类实例变量->子类构造器

原创粉丝点击