student s=new student();
通过一个类可以实例化N个对象
语法: new 类名()
new 是java 语言当中的一个运算浮
new 运算符的作用是创建对象,在jvm堆内存当中开辟新的空间
方法代码片段执行的时候,会给该方法分配内存空间,在栈中压栈
堆内存:new的对象在堆内存中存储
student 是一个引用数据类型
s 是一个变量名
new student 学生对象
s 是一个局部变量【在栈内存分配】
s就是引用,java中只能引用访问堆内存当中对象内部的实例变量
- 什么是对象? new 运算符在对内存中开辟的内存空间称为对象
- 什么是引用? 引用是一个变量,只不过这个变量中保存了其他java对象的内存地址
- 访问实例变量的语法格式:
读取数据:引用.变量名
修改数据:引用.变量名=值
System.out.println(s.name);
局部变量在栈内存储
成员变量中的实例变量在对内存的java对象内存存储, 实例变量是一个对象一份
实例变量:
例如:
class Text{
//static 修饰的为静态成员变量
//没有static 为成员变量
public static int num;
public int temp;
}
Text b=new Text();
b.temp; 实例成员变量
Text.num; 类成员变量,对于类成员变量,所有对象共享一个变量。
总结:
1.jvm(java虚拟机)主要包括3块内存:栈内存,推内存,方法区内存
2.堆内存和方法区内存各有一个,一个线程一个栈内存
3.方法调用的时候,会给该方法分配内存空间,在栈中压栈;执行结束后,内存空间会释放,称为弹栈
4.占中主要存储的是方法体中的局部变量
5.方法的代码片段以及整个类的代码片段都会存储到方法区内存中,在类加载的时候会载入。
6.在程序执行中使用new运算符创建的java对象,存储在堆内存中,对象内部有实例变量,所以实例变量存储在堆内存中
7.变量分类:
- 局部变量【方法体中声明】
- 成员变量【方法体声明】
- 实例变量【前面修饰符没有static】
- 静态变量【前面修饰符有static】
8.静态变量存储在方法去内存中
9.三块内存中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对堆内存
10.自动垃圾回收机制 GC机制
- 当堆内存中的Java对象成为垃圾数据的时候,会被回收机制回收
当数据不被引用时,就是垃圾数据
空指针异常
Customer c=new Customer();
System.out.println(c.id);//0
c=null;
//以下程序编译可以通过
//程序运行时空指针异常
//空引用访问“实例”相关的数据一定会出现空指针异常
//java.lang.NullPointerException
System.out.println(c.id);
//“实例”相关的数据:这个数据访问的时候必须有对象的参与,这种数据就是实力相关的数据
}
实例变量必须先创建对象,通过引用.的方式访问,不能直接使用类名.的方式访问`
class Product {
int production;
String productions;
}
public class text {
public static void main(String[] args) {
Product A=new Product();
A.production;
A.productions;
//错误:Product .production;
}
}