zoukankan      html  css  js  c++  java
  • java初始化顺序

    public class A {
    
        A(String str){
            System.out.println(str) ;
        }
        
        static A a = new A("A.static new A") ;
        
        static {
            new A("A.static block") ;
        }
        
        
        public void printA(){
            System.out.println("print method") ;
        }
        
        public static void print(){
            System.out.println("print static method") ;
        }
        
         static class C {
             C(){
                 System.out.println("CCC.......") ;
             }
         }
    }
    public class B extends A{
    
        B(String str) {
            super(str);
        }
    
        static B b = new B("init b") ;
        static {
            new B("B static block") ;
        }
        
        static class D {//内部类
             D(){
                 System.out.println("DDD.......") ;
             }
    public static final D d = new D() ; }
    public static void main(String[] args) { new B("main.....") ; } }

    由此可知当新建一java对象(上面main方法中new B())时,它的内部初始化顺序为:

    1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行

    2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行

    3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

    4.  父类构造方法

    5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

    6.  子类构造方法

    备注:java内部静态类也是在调用时初始化,和静态方法是一致的!所以内部静态类的静态变量也是在调用时初始化的!

  • 相关阅读:
    android中ping命令的实现
    回溯法——求解0-1背包问题
    scanner使用中遇见的问题
    Eddy's digital Roots
    项目经理注意事项(3)---宏观把控
    Spring IOC容器
    C++对象模型——Template中的名称决议方式 (第七章)
    比赛对手名单
    猴子吃桃问题
    设计模式-单例模式(02)
  • 原文地址:https://www.cnblogs.com/iusmile/p/2679089.html
Copyright © 2011-2022 走看看