1、Java语言中除基本类型之外的变量类型都称之为应用类型。Java中的对象是通过引用对其操作的。
2、在内存中类和对象的区分:
a、类是静态的概念,存放在代码区;
b、对象是new出来的,位于堆内存(动态的)中,类的每个成员变量在不 同的对象中 都有不同的值(除了静态变量),而方法只有一份,执行的时候 才占用内存。
3、Java在内存分配时涉及到的区域:
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是 存放在堆中
◆堆:存放用new产生的数据
◆静态域:存放在对象中用static定义的静态成员
◆常量池:存放常量
◆非RAM存储:硬盘等永久存储空间
4、内存实例分析:
a、主类:
package yc.test;
public class T {
public static voidmain(String[] args) {
Test test = new Test();
test.setI(2);
test.setJ(2);
System.out.println("add:"+test.add());
}
}
b、辅类:
package yc.test;
public class Test {
private int i= 0;
private int j= 0;
public intadd(){
return i+j;
}
public intgetI() {
return i;
}
public voidsetI(int i) {
this.i = i;
}
public intgetJ() {
return j;
}
public voidsetJ(int j) {
this.j = j;
}
}
分析:从主函数开始,①在栈内存中,创建一个引用变量test并设置值为null;②在堆内存中,生成一个对象Test,并将其空间首地址值赋给引用变量test;③在栈内存中,创建一个基本数据类型变量x并且赋值为2;
④将test所指对象的i(堆内存中)赋值为x;
⑤完成赋值过后,退出方法回到主函数之前,将栈内存中的x变量释放掉;
⑥重复③④⑤步完成test所指对象的j的赋值;
⑦test调用add方法读取出堆内存中i、j的值进行运算,完成输出。