• 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内部静态类也是在调用时初始化,和静态方法是一致的!所以内部静态类的静态变量也是在调用时初始化的!

  • 相关阅读:
    第15周作业
    软件工程结课作业
    第13次作业--邮箱的正则表达式
    第12次作业
    第10次作业
    Java 8 新的时间日期库
    你还在用if-else吗?
    Java并发编程:4种线程池和缓冲队列BlockingQueue
    ZooKeeper学习第八期——ZooKeeper伸缩性(转)
    ZooKeeper学习第七期--ZooKeeper一致性原理(转)
  • 原文地址:https://www.cnblogs.com/iusmile/p/2679089.html
Copyright © 2020-2023  润新知