Java成员变量赋值有四种方式:一、声明时直接初始化,实例变量每次创建对象时初始化,静态变量类加载时初始化;二、构造方法中赋值,灵活且支持参数校验;三、setter方法赋值,用于对象创建后的修改并支持封装;四、静态/实例代码块,适用于复杂初始化逻辑。

Java 类中的成员变量(也叫字段、实例变量或类变量)可以通过多种方式赋值,关键看它是实例变量还是静态变量,以及你希望在什么时候完成赋值。
一、声明时直接初始化
最简单的方式是在定义成员变量的同时用等号赋初始值。这种方式对实例变量和静态变量都适用,且在对象创建或类加载时自动执行。
- 实例变量:每次创建对象时都会用该值初始化
- 静态变量:类首次被加载时初始化一次,所有实例共享
public class Person {
String name = "未知"; // 实例变量,声明即初始化
static int count = 0; // 静态变量,类加载时初始化
}
二、在构造方法中赋值
这是最常用、最灵活的方式,尤其适合需要根据传入参数动态设置值的场景。构造方法会在每次 new 对象时执行,可确保每个对象的成员变量都被明确初始化。
- 适用于所有实例变量
- 可做参数校验、转换或依赖其他逻辑
- 若类有多个构造方法,建议在每个中都为关键字段赋值,或用构造方法链统一处理
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name != null ? name : "匿名";
this.age = Math.max(0, age); // 确保 age 不为负
}
}
三、通过 setter 方法赋值
当对象创建后仍需修改成员变量时,通常提供 public 或 package-private 的 setter 方法。它支持封装,便于后期加入校验、日志或通知逻辑。
立即学习“Java免费学习笔记(深入)”;
- 适合需要后期更新的字段(如用户信息修改)
- 配合 private 修饰符使用,避免外部直接访问
- 不是“初始化”手段,而是运行时赋值方式
public class Person {
private String email;
public void setEmail(String email) {
if (email != null && email.contains("@")) {
this.email = email;
} else {
throw new IllegalArgumentException("邮箱格式不合法");
}
}
}
四、静态代码块与实例代码块(较少用但有用)
当初始化逻辑较复杂(比如读配置、连接资源、计算默认值),又不适合写在构造方法里时,可用代码块:
- 静态代码块:只执行一次,用于初始化静态变量
- 实例代码块:每次创建对象时执行,在构造方法之前运行,可用于多个构造方法共用的初始化逻辑
public class Config {
static String env;
static {
env = System.getProperty("env", "dev"); // 类加载时确定环境
}
private List<String> features;
{
features = new ArrayList<>(); // 每次 new 时都新建一个空列表
features.add("basic");
}
}
注意:成员变量未显式赋值时,Java 会按类型给默认值(如 int 为 0,引用类型为 null),但依赖默认值容易引发空指针或语义错误,建议显式初始化。


















