zoukankan      html  css  js  c++  java
  • Java中四大代码块的运行顺序(附code)

    验证证的方法是写code。例如以下:

    public class test {
    
        
        static class A {
            public static String name = "hello";
    
            static {
                System.out.println("A static block1"); //1
            }
    
            {
                System.out.println("A block3"); //3
            }
    
            public A() {
                System.out.println("A constructor4"); //4
            }
        }
    
    
        static class B extends A {
            public static String childName = "hello";
    
            static {
                System.out.println("B static block2"); //2
            }
    
            {
                System.out.println("B block5"); //5
            }
    
            public B() {
                System.out.println("B constructor6"); //6
            }
        }
    
        
        public static void main(String[] args) {
           new B();
        }
    
    }
    以上运行结果为:
    A static block1
    B static block2
    A block3
    A constructor4
    B block5
    B constructor6

    • 分析:当运行new B()时。它首先去看父类里面有没有静态代码块,假设有,它先去运行父类里面静态代码块里面的内容。当父类的静态代码块里面的内容运行完成之后。接着去运行子类(自己这个类)里面的静态代码块,当子类的静态代码块运行完成之后,它接着又去看父类有没有非静态代码块,假设有就运行父类的非静态代码块,父类的非静态代码块运行完成。接着运行父类的构造方法;父类的构造方法运行完成之后,它接着去看子类有没有非静态代码块,假设有就运行子类的非静态代码块。

      子类的非静态代码块运行完成再去运行子类的构造方法,这个就是一个对象的初始化顺序。

       

    • 总结:对象的初始化顺序:首先运行父类静态的内容,父类静态的内容运行完成后,接着去运行子类的静态的内容,当子类的静态内容运行完成之后,再去看父类有没有非静态代码块。假设有就运行父类的非静态代码块,父类的非静态代码块运行完成,接着运行父类的构造方法。父类的构造方法运行完成之后,它接着去看子类有没有非静态代码块,假设有就运行子类的非静态代码块。子类的非静态代码块运行完成再去运行子类的构造方法。总之中的一个句话,静态代码块内容先运行,接着运行父类非静态代码块和构造方法,然后运行子类非静态代码块和构造方法。 
    • 注意:子类的构造方法,无论这个构造方法带不带參数,默认的它都会先去寻找父类的不带參数的构造方法。假设父类没有不带參数的构造方法,那么子类必须用supper关键子来调用父类带參数的构造方法,否则编译不能通过。


  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6928964.html
Copyright © 2011-2022 走看看