JVM之堆内存(创建对象)

JVM中,创建对象是在堆内存中。

什么是实例变量?

  对象又被称为实例:实例变量实际上就是对象级别的变量。比如:

public class 明星类{
    double height;
}
//身高这个属性所有的明星对象都有,但是每一个对象都有”自己的身高值“、
//假设创建10个明星对象,height变量应该有10份
//所以这种变量被称为对象级别的变量,属于实例变量
//实例变量不可以直接被类调用,必须通过new对象
  

看两个代码:

/*Student.java
* Student 既是一个类名,同时又是一个"类型名",属于引用数据类型
* */

/*
 * 共同特征
 * 学号:采用int类型
 * 姓名:采用String类型
 * 年龄:采用int类型
 * 性别:采用char或者Boolean类型
 * 住址:采用String类型
 * 属性(状态描述):在java程序中以"成员变量"的形式存在
 * 对于成员变量来说,应该是一个对象有一份内存空间
 *   1.张三有张三的学号
 *   2.李四有李四的学号
 *   张三和李四的学号不一样,所以应该有两份不同的内存空间
 *对象又被称为实例:实例变量实际上就是对象级别的变量
 * */

public class Student {// 这个程序编译之后,生成Student.class字节码文件。

  //学号,姓名,年龄,性别,住址都是实例变量
    //学号,
    int no;
    //姓名
    String name;
    //年龄
    int age;
    //性别
    boolean sex;
    //住址
    String addr;

}
/*StudentTest.java
对象的创建和使用
*变量必须先声明,再赋值
* 注意:成员变量在没有手动赋值的情况下,系统赋值默认值
* ----------------------------------------------
* byte          0
* short         0
* int           0
* long          0L
* float         0.0F
* double        0.0
* boolean       false
* char          \u0000
* 引用数据类型    null
*
* */
public class StudentTest{
    public static void main(String[] args) {
        //创建学生对象1,先执行右边new Student(),然后通过等号把结果赋值给s1
        //s1属于局部变量吗?  yes
     //s1叫做引用
//局部变量存储在栈内存中(栈主要存储局部变量) Student s1 = new Student();
     //怎么访问实例变量: 语法:引用.实例变量名,也可以赋值,修改值,可以多次改
     System.out.println(s1.no);
     s1.no = 110;
     s1.age = 20;       
//创建学生对象2 //s2属于局部变量吗? yes。都属于main方法中的局部变量
     //s2叫做引用,限制性右边new Student(),然后通过等号吧结果赋值给s2
Student s2 = new Student(); } }

 

JVM中,堆内存的说明图:

 

 

 对象和引用的区别:

对象是通过new 出来的,在堆内存中存储

引用是:

posted @ 2020-09-02 15:05  裴敏儿  阅读(282)  评论(0编辑  收藏  举报