Java成员变量默认初始化:基本类型为0/false/’u0000’,引用类型为null;局部变量无默认值;推荐显式初始化(如空集合、空字符串),构造器中校验参数并赋值,结合@NonNull、Optional等工具主动防控NPE。
Java中成员变量的空值初始化,关键在于区分变量类型(基本类型 vs 引用类型)和声明位置(类级别 vs 方法内),并理解JVM默认初始化机制与显式初始化的协同关系。
类的成员变量(即字段)在未显式赋值时,JVM会按类型自动赋予默认值:数值类型(int、long等)为0,boolean为false,char为'u0000',而所有引用类型(包括自定义对象、数组、String等)默认为null。这个过程发生在对象实例化时,由JVM保证,无需手动干预。
null值若被直接调用方法(如str.length()),会在运行时抛出NullPointerException
依赖默认null容易掩盖设计意图,增加空指针风险。建议在声明时赋予业务语义明确的初始值:
null:private List<String> tags = new ArrayList<>();
private String name = "";(注意:需确认空字符串是否符合业务逻辑)null,直接设为false或true,除非确实需要三态语义(此时应改用Boolean并明确注释)private final Map<String, Object> config = new HashMap<>();
当初始值依赖参数或复杂逻辑时,应在构造器中完成初始化,而非依赖默认null:
立即学习“Java免费学习笔记(深入)”;
null的入参做防御性检查:Objects.requireNonNull(name, "name must not be null")
null状态主动管理而非被动容忍null:
@NonNull(JetBrains)、@NotNull(JSR-305)或Lombok的@NonNull配合编译期检查Optional<T>而非null,调用方必须显式处理“不存在”情形null参数或触发条件分支后字段状态是否符合预期