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 出来的,在堆内存中存储
引用是: