JAVA底层分析

1.虚拟机栈作用:

使用方法时,首先方法进去栈空间,方法里面的信息也会进去,形成栈帧。

形成对象时会执行方法(如new Person())也还是如此运行,形成栈帧。在形成对象时,对象里面的方法可以看作在方法区的类的信息里面

2.堆的作用

对象会出现在堆里面,由栈中的变量指代其地址,对象里面的属性名会存放在里面

那么,对象里面的属性怎么被堆知道的呢?

这就要涉及到方法区

3.方法区的作用

        因为方法区会有类的信息,因此堆会知道,所以堆中的对象会知道对象的属性等信息,不过由于方法没必要重复,所以对象里面的方法可以看作在方法区的类的信息里面

注意:

        1.因为方法区不会重复出现同一个类信息,所以之后每个新创建的对象的属性名的数据都是从中的来

        2.因为方法区里不会重复出现同一个方法,所以之后每个新创建的对象的方法都是同一个方法。

        3.构建不同的对象时,输入不同属性值时,属性名对应的属性值不同。这是因为属性值都放在方法区的常量池里面,所以根据同一个类构建出来的对象虽然属性名相同,属性值不同。

4.实例介绍

class Person{
    String name;
    int age;
    public void show(){
        System.out.println("姓名"+this.name);
    }
}
public class TestPerson {
    public static void main(String[] args) {
//        创建p对象
        Person p=new Person();//创建完毕,被移出栈,因为构造方法在创建一个对象后销毁
        p.name="zx";
        //这个name被赋值后,不是进入堆中,而是进入常量池中,不过属性名还在堆
        p.show();//调用时,show出现在栈中,传一个隐含this,这里this指的是p所指的对象,形成一个栈帧,然后调用该方法,调用完毕,出帧
//        创建p1对象
        Person p1=new Person();//方法区不会重复出现同一个类信息,不过会在堆里面再出现一个对象的地址
        p1.name="zyp";
        p1.show();//调用时,show出现在栈中,传一个隐含this,这里this指的是p1所指的对象形成一个栈帧,然后调用该方法,调用完毕,出帧
        //p1.show()执行后将name的属性值再传入方法区的常量值,这个与p1原来传的互不影响,然后main方法调用完毕,main方法销毁,
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyp20221

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值