关于成员变量与局部变量变量的初始化问题

关于成员变量与局部变量变量的初始化问题

局部变量

在Java的局部变量中,定义变量需要初始化,不然就会在调用的时候报错,无法被调用,局部变量存储在java虚拟机栈中,使用完毕以后就立即销毁。

// 定义变量
int a ;
System.out.println(a);

在这里插入图片描述
他会报错变量未初始化;
虽然变量三要素里面说,类型的作用为为此变量指定此类型相应的存储空间,但是这时候只是定义了一个指向内存空间的指针,此时里面还没有真正的存放东西。
相当于一个快递公司新建了一个存货仓库,但是里面没有存放任何包裹,所以就没有东西可配发,就无法调用。
在这里插入图片描述
给他初始化数值就没问题了

成员变量

而成员变量却不用赋初始值,就可以直接调用,他存储在Heap也就是堆中,会随着对象的消失而消失。
在这里插入图片描述
其实所有类的成员变量都是有默认值的,在加载器将class文件加载到jvm的过程涉及到加载,验证,准备,解析,初始化
静态方法成员变量会被初始化两次,第一次初始化会附上默认值,数值类型为0,字符类型为null,第二次才为用户赋予的值。
非静态方法成员变量,只有在代码不赋值的时候才会默认赋值,值同上
而且如果局部变量和成员变量名字重复的情况下,成员变量会被隐藏,输出的为局部变量的值。想要输出的是成员变量的值的话就必须要用this方法,执行this.name=name;才会使成员变量覆盖局部变量。
此类问题还能更深层的讨论,因为我技术不足,就不能再妄加猜测了,希望各位大佬能够来指点指点

猜你喜欢

转载自blog.csdn.net/qq_49249150/article/details/107213451