【第22期】观点:IT 行业加班,到底有没有价值?

Java类成员初始化顺序

原创 2016年08月30日 13:42:33

首先看下这段测试代码

public class ClassLoader {

    public static void main(String[] args) {
        // 3.第四步,new一个类,但在new之前要处理匿名代码块
        new ClassLoader();                         
    }

    // 1.第二步,静态变量和静态代码块的加载顺序由编写先后决定
    static int sNum = 4;                           

    // 2.第三步,静态块,然后执行静态代码块,因为有输出,故打印
    static {                                       
        System.out.println("静态方法块执行");
    }

    // 4.第五步,按照顺序加载匿名代码块,代码块中有打印
    {
        System.out.println("静态变量 =" + sNum);    
        sNum += 3;
        System.out.println("类方法快执行");
        System.out.println("静态变量 =" + sNum);
    }

    // 5.第六步,按照顺序加载变量
    int mNum = 5;   

    // 6.第七步,按照顺序打印
    { 
        System.out.println("成员方法块执行");           
    }

    // 7.第八步,最后加载构造函数,完成对象的建立
    ClassLoader() {        
        System.out.println("成员变量 =" + mNum);
        System.out.println("构造器执行");
    }

    // 8.静态方法,调用的时候才加载
    static void run()    
    {
        System.out.println("static function");
    }

    // 8.内部类,调用的时候才加载
    static class Interior {    
        static {
            System.out.println("Interior");
        }
    }

}

看下输出结果

输出结果

输出结果表明,程序的执行顺序为:
如果类还没有被加载:
1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
2、执行子类的静态代码块和静态变量初始化。
3、执行父类的实例变量初始化
4、执行父类的构造函数
5、执行子类的实例变量初始化
6、执行子类的构造函数

如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

java基础---静态变量,成员变量,局部变量及类的初始化顺序

类变量(也叫静态变量):是类中独立于方法之外的变量,用static 修饰。(static表示“全局的”、“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执...

JAVA 成员初始化顺序和内存分配过程

成员初始化顺序属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序: 父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。 子类静态成员和静态初始化块,按在代码中出...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

JAVA学习笔记--- 静态变量、成员变量、局部变量及类的初始化顺序

类初始化化是分,静态,和非静态,静态是在类的字节码加载到jvm时,仅且只执行一次,按照先父后子,父子静态都初始化完后,跟据需要再初始化父子非静态部分(也就是说静态和非静态是分开的,但往往因为new的时...

Java中成员变量的初始化顺序浅析

Java 中变量的初始化顺序这是我在CSDN的第一篇博客,日后继续记录自己所学的点点滴滴,或者遇到的各种坑。如有错漏,望批评指正。 在Java中,所有的变量在使用之前都得到恰当的初始化,对于方法的...

java类成员初始化顺序

java中的类成员类型按照属于类还是属于对象来分可分为静态成员和非静态成员,按照数据类型来分可分为基本类型和引用类型,因此可细分为4种. 看如下代码 public class Super { ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)