学习笔记-对象内存图、基本数据类型和引用数据类型

package day3.test2;

public class Student {
    String name;
    int age;

    public void study() {
        System.out.println("好好学习");
    }
}
package day3.test2;

public class StudentTest {
    public static void main(String[] args) {
        Student s=new Student();
        System.out.println(s);
        System.out.println(s.name+" "+s.age);
        s.name="阿强";
        s.age=23;
        System.out.println(s.name+" "+s.age);
        s.study();
    }
}

运行StudentTest

1.把 StudentTest 的字节码文件 StudentTest.class加载到方法区,临时存储main方法;

2.main方法进入栈内存;

3.创建一个Student的对象s,先在方法区加载Student.class(内部含有所有的成员变量和成员方法),然后在main方法中开辟一个空间s(用来存储Student类的对象的地址值)。又在堆内存中开辟一个空间(地址值为day3.test2.Student@1b6d3586),空间内有Student的所有成员变量,以及成员方法的地址值(用来找到class中的方法 ),然后对成员变量进行默认初始化,并通过“=”运算符把空间的地址值赋值给栈内存中的变量s;

4.输出s,s中存储的是地址值,所以输出地址值;

5.输出s.name s.age,此时s.name和s.age都是默认值,输出 null 0;

6.把 阿强 赋值给s.name,即把 阿强 赋值给 day3.test2.Student@1b6d3586.name,堆内存空间 中的name的值由默认值null变为”阿强“;

7.把 23 赋值给s.age,即把 23 赋值给 day3.test2.Student@1b6d3586.age,堆内存空间中的age的值由默认值0变为”阿强“;

8.输出s.name s.age,此时s.name和s.age为 阿强 和 23 ,输出 阿强 23;

9.通过s调用study方法,先通过s找到堆内存空间,然后通过堆内存空间的成员方法的地址值找到方法区的成员方法,study方法加载进栈,打印“好好学习”,study方法执行完毕,出栈;

10.main方法执行完毕,出栈,堆内存空间因为没有变量指向,空间回收

 基本数据类型:数据值是存储在自己的空间中,赋值给其他变量,也是赋的真实的值

int a=10;
int b=a;//b=10

引用数据类型:数据值是存储在其他空间中,自己空间存储的是地址值,赋值给其他变量,赋的地址值,如上述中的 s 存储的就是地址值,指向堆内存中的空间

Student s1=new Student();
Student s2=s1;//s2中存储的也是地址值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值