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关键子来调用父类带參数的构造方法,否则编译不能通过。


  • 相关阅读:
    使用Jmeter进行http接口测试
    Jmeter分布式压测
    Jmeter进阶技能-数据库信息,传递参数
    解决Mac OS X 升级10.10(Yosemite)后ADT(Eclipse)无法找到真机
    bug list
    【adb工具包】Android的工具包log日志抓取
    【AI模型测试】运行过程中出错和解决方案:ImportError: cannot import name '_validate_lengths'
    【AI模型测试】anaconda linux 常用命令、安装源、清理缓存(转)
    【AI模型测试】skimage库安装(转)
    【Python学习】pip 常用命令及控制台怎么查看python 及pip 和已安装包版本号(转)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6928964.html
Copyright © 2011-2022 走看看