java18

1.所有对象和数组都是在堆里创建的
一个方法一个栈帧
int[ ] ages = new int[ ]{10,20,30}; 在堆中初始化数组 ,new(将10,20,30的内存地址赋值给了ages)
System.out.println(ages);
【[I@15db9742】输出内存地址
java.jvm中有自动清除垃圾的功能。
当内存资源紧张时,无需手动控制内存的的释放,它会自动清除没用的对象
2.对象堆的内存分析
栈中有成员变量,但是没有初始值
堆中存放了对象的地址,并且存放的每个基本数据类型都有初始值
在执行指令时会根据栈中的地址去堆中寻找
new的意思就是在堆中开辟存储空间
方法区存在class的字节码
3.Person zly = new Person();
zly.name= "赵丽颖";
zly.age = 18;
Person rh = new Person();
rh.name = "如花";
System.out.println(rh.name);
【如花】

栈:Person zly = 内存地址
堆:Person
地址值:fdsfdsf
name 赵丽颖
age 18
zly = rh;
System.out.println(zly.name);
【如花】
zly = null;
【java.lang.NullPointerException】 空指针异常(没有地址)
3.字符(char) 初始值:‘/u0000’
整数 初始值:0
小数
float 初始值:0.0f
double 初始值:0.0d
布尔 初始值:false
4.凡是使用new关键字创建出来的类型都是引用数据类型
引用数据类型:类,数组,枚举,注解,接口
5.基本数据类型的值传递
static void a(int x) {
System.out.println("3="+x);
x = 100;
System.out.println("1="+x);
}
public static void main(String[] args) {
int x = 20;
a(x);
System.out.println("2="+x);
}
【1=100
2=20
3=20】

分析:x = 20 先入栈,x = 100后入栈
接着调用a方法
所以 3 = 20,
再一次x赋值,所以1 = 100
接着a方法出栈
在打印2 = 20;
6.引用数据类型的地址传递(数组的第一个元素与第二个元素调换位置)
//分析:将第0个元素位置空出来,
把第1个元素放进去
将第0个元素放在第1个元素位置处
//调用方法前后输出对比

猜你喜欢

转载自www.cnblogs.com/-zero/p/10332155.html