关于java中类成员的加载顺序

目录

一、单个类的加载顺序

二、代码

三、输出结果

三、对输出结果的解释 

四、类加载的内存图:

一、单个类的加载顺序

1、加载是类

2、产生自己的静态空间 静态属性 静态方法 静态块 

执行静态块

3、在堆内存中开辟对象空间

4、加载类的非静态成员 普通属性 普通方法 普通块 

执行普通块 执行构造方法

5、将对象空间的地址引用交给   变量来存储

二、代码



public class Demo {

    private String demo = "普通属性";

    private static String demoStatic = "静态属性";


    public Demo() {

        System.out.println("这是Demo无参构造方法");
    }

    {
        this.test();
        System.out.println("这是Demo普通的块");
    }

    static {
        testStatic();
        System.out.println("这是Demo的静态块");
    }

    public static void testStatic() {
        System.out.println(getDemoStatic());
        System.out.println("这是Demo的静态方法");
    }

    public void test() {
        System.out.println(getDemo());
        System.out.println("这是Demo的普通方法");
    }

    public String getDemo() {
        return demo;
    }

    public static String getDemoStatic() {
        return demoStatic;
    }

}
public class TestMain {

    public static void main(String[] args){

        Demo p = new Demo();

    }
}

三、输出结果

三、对输出结果的解释 

在静态方法中调用了静态属性,在静态块中调用了静态方法 

都能如愿以偿的输出说明了在静态方法之前就加载了属性   

在加载静态方法之前就加载了静态属性------->静态属性产生的比静态方法早

在加载静态块之前就加载了静态方法------>静态方法的产生比静态块早

得出结论:

早------>晚

静态属性    静态方法    静态块

 在普通方法中调用了普通属性,在普通块中调用了普通方法 

都能如愿以偿的输出说明了在普通方法之前就加载了属性   

在加载普通方法之前就加载了普通属性------->普通属性产生的比普通方法早

在加载普通块之前就加载了普通方法------>普通方法的产生比普通块早

最后输出了默认的构造方法

得出结论:

早------>晚

普通属性    普通方法    普通块   默认的构造方法

四、类加载的内存图:

对象的创建是在堆内存中

变量是在栈内存中,Demo  d = new Demo();

Demo  d =    的意思是将对象空间的地址引用交给   变量来存储

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值