6.1.jvm的内存对象存在形式
6.2.类的属性注意事项和细节
- 属性的定义:访问修饰符 属性类型 属性名;
访问修饰符:控制属性的访问范围
- 属性的定义类型可以为任意类型,包含基本类型和引用类型
- 属性如果不赋值,有默认值
int 0
short 0
byte 0
long 0
float 0.0
double 0.0
char \u0000
boolean false
String null
6.3.jvm的内存分析对象代码执行流程
与数组类似,是地址传递
6.4.类和对象的内存分配机制
- Java内存的结果分析:
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat,数组等)
- 方法区:常量池(常量,比如字符串),类加载信息
- Java创建对象的流程简单分析
Person p = new Person();
p.name = "jack";
p.age = 10;
- 先加载Person类信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化
- 把地址赋给p,p就指向对象
- 进行指定初始化,比如
p.name = "jack" p.age = 10
jvm的内存方法的调用机制分析
总结:
Person p = new Person();
int sum = p.getSum(10,20);
p.name = "jack";
该代码自上而下编译,Person p
在方法区加载Person类信息,包括属性信息和方法信息,但并没有开辟对象空间,new Person()
在堆中分配对象空间,进行默认初始化,把该对象空间地址赋给p,p就指向该对象。
再往下运行,调用类方法p.getSum(10,20)
,在栈中开辟一个独立空间,当方法执行完毕,或者执行到return语句,退出栈,即销毁空间。
返回后,继续执行后面代码,'jack'
存放在方法区中的常量池,p.name='jack'
将p指向的堆中对象空间里的name变量赋值为’jack’,即name指向常量池中存放’jack’的地址。
构造器扩展: