修改Java变量访问修饰符后对象属性值为何为null?
问题解答:为什么修改访问修饰符后输出null?
修改访问修饰符不会导致对象原有信息丢失,你遇到的问题核心是:两次运行的是完全独立的程序实例,前后的Student对象根本不是同一个。
具体原因拆解
- 第一次运行程序时,你创建了
Student对象s1并给public的name赋值为"sarang",程序执行完毕后,这个对象会被Java垃圾回收机制销毁,内存中的数据也随之消失。 - 当你修改
name的访问修饰符为private并重新运行程序时,JVM会启动全新进程,重新创建一个新的Student对象s1。这个新对象的private name没有被任何代码赋值(之前的赋值操作属于上一次运行,和本次无关),所以变量保持默认值null,调用getName()自然返回null。
访问修饰符的本质作用
public/private这类访问修饰符仅控制变量的访问权限:
public允许类外部直接读写变量private限制只有类内部能直接访问,外部必须通过getter/setter方法操作
它们不会改变对象存储的数据,也不会导致已有对象的属性值丢失——只要对象还在内存中,属性值就会保留,只是外部能否直接访问的区别。
正确的操作方式
如果想在修改访问修饰符后得到"sarang",需要在修改后的代码中给新对象的name赋值,比如先给Student类添加setter方法:
public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
然后在StudentUse类中通过setter赋值:
Student s1 = new Student(); s1.setName("sarang"); System.out.println(s1.getName()); // 输出"sarang"
内容的提问来源于stack exchange,提问作者Sarang Tripathi
相关产品推荐
相关产品推荐

