Java声明未初始化对象引用未默认赋null反报错的原因求解
报错原因
你遇到这个报错是两个Java规则混淆导致的:
- 首先,Java 规定可执行语句不能直接放在类的作用域下,只能放在方法、构造器、静态/实例初始化块内部。你写的
if (obj==null) System.out.println(obj);属于可执行语句,直接放在类A的定义里本身就不符合语法要求。 - 其次,你声明的
c obj是类A的实例成员变量,这类变量确实会在实例化对象时被默认赋值为null,但因为你把判断语句放在了非法的位置,编译器无法按照成员变量的初始化规则处理obj,就会抛出变量未初始化的报错。
修正示例
把判断逻辑放到初始化块或者方法里即可正常运行:
class c { int age=12; c variable123; } public class A { c obj; // 放到实例初始化块中 { if (obj==null) System.out.println(obj); } // 也可以放到普通方法中 public void printIfNull() { if (obj==null) System.out.println(obj); } }
- 额外提示:如果是方法内部定义的局部变量,Java不会提供默认赋值,必须手动初始化后才能使用,否则也会抛出同样的未初始化报错。
内容的提问来源于stack exchange,提问作者het99
相关产品推荐
相关产品推荐

