类与对象
1. 对象的内存
1.1 单个对象内存解析
典型代码
Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1
内存解析:
等号左边的变量是在栈中创建,等号右边的对象是在堆中创建
变量被赋予的只是对象的地址值
在创建对象的时候其属性先被赋予初始的值
数组对象的内存解析
jvm内存结构
虚拟机栈:java会将局部变量放到虚拟机栈中
虚拟机堆:存放代码中的实例(对象、数组等) 对象的属性也会在虚拟机堆中加载
方法区:类的加载信息、常量池、静态域
代码块
代码块分为非静态代码块和静态代码块
二者区别
- 静态代码块
- 内部可以输出语句
- 随着类的加载而执行。而且只执行一次
- 如果一个类定义多个代码块这按先后顺序进行执行
- 静态代码块只能调用静态的属性、静态的方法
- 非静态代码块
- 随着对象的创建而执行
- 可以再对象的创建的时,对对象的属性进行初始化