码迷,mamicode.com
首页 > 其他好文 > 详细

类的加载过程

时间:2019-10-15 12:53:22      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:private   例子   rgs   inittest   turn   mil   code   对象   family   

类的加载过程:

1.先加载类级别的成员(静态成员变量的方法 以及 静态初始化块,这两个打印的顺序依据出现的先后顺序)
2.再加载对象级别的成员(实例初始化块、普通成员变量的方法,打印的顺序依据出现的先后顺序)
3.构造函数

具体例子:
public class ObjectInitTest {
    public ObjectInitTest() {
        System.out.println("这是构造函数alta+Insert快捷键:ObjectInitTest()");
    }
    //静态初始化块
    static{
        b=10;
        System.out.println("静态初始化块");
    }
    //实例初始化块  对实例成员变量(依赖于对象)
    {
        System.out.println("instance init block");
    }
    private int a=method1();//普通的成员变量,对象级别的
    private static int b=method2();//静态的成员是共享的,类级别的
    private int method1() {
        System.out.println("对象级别的method 1");
        return 1;
    }
    private static int method2() {
        System.out.println("静态的,类级别的method 2");
        return 2;
    }

    public static void main(String[] args) {
        /**
         * new ObjectInitTest()
         * 对象的产生过程
         * 1. JVM会在ObjectInitTest.class文件
         * 2. 先加载类级别的成员(静态成员变量的方法 以及 静态初始化块,这两个打印的顺序依据出现的先后顺序)
         * 3. 再加载对象级别的成员(实例初始化块、普通成员变量的方法,打印的顺序依据出现的先后顺序)
         * 4.构造函数
         */
        ObjectInitTest o=new ObjectInitTest();
    }
}

技术图片

 

 继承类同理:  静态>普通        基类>继承类

先打印基类的静态方法以及静态初始化块(根据出现的先后顺序),再打印子类的静态方法及静态初始化块(先后顺序)。

再打印基类普通的方法以及普通实例化块(先后),最后打印基类的构造函数;再打印子类的普通方法及普通实例化块(先后),最后打印子类的构造函数

public class ObjectInitTest2 extends ObjectInitTest {
        private  static int c=method3();
        public static int method3(){
            System.out.println("这是继承类的静态方法");
            return 3;
        }
        static{
            System.out.println("继承类的静态初始化块");
        }
        private int d=method4();
        public int method4(){
            System.out.println("这是继承类的普通的成员方法");
            return 4;
        }
    {
        System.out.println("继承类的普通实例化块");
    }
        public ObjectInitTest2(){
            System.out.println("继承类的构造方法");
        }

    public static void main(String[] args) {
        ObjectInitTest2 o2=new ObjectInitTest2();
    }
}

技术图片

 

 

类的加载过程

标签:private   例子   rgs   inittest   turn   mil   code   对象   family   

原文地址:https://www.cnblogs.com/laurarararararara/p/11676773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!