本文目录导读:

在Java中,成员变量的初始化有多种方式,下面我会通过一个具体的案例来说明不同的初始化方法。
案例:学生信息管理系统
public class Student {
// 1. 默认初始化(系统自动赋默认值)
private String name; // 默认值: null
private int age; // 默认值: 0
private double score; // 默认值: 0.0
private boolean isActive; // 默认值: false
private String[] courses; // 默认值: null
// 2. 显式初始化(声明时直接赋值)
private String gender = "未知";
private static int totalStudents = 0;
// 3. 代码块初始化
{
// 实例初始化块 - 每次创建对象时执行
System.out.println("执行实例初始化块");
this.age = 18; // 默认年龄18岁
}
static {
// 静态初始化块 - 类加载时执行一次
System.out.println("执行静态初始化块");
totalStudents = 100; // 初始学生总数
}
// 4. 构造器初始化
public Student() {
// 无参构造器
this.name = "未知学生";
this.courses = new String[]{"未选课"};
totalStudents++; // 每创建一个实例,总数加1
}
public Student(String name, int age) {
// 有参构造器 - 通过参数初始化
this.name = name;
this.age = age;
this.courses = new String[3]; // 初始化学员课程数组
totalStudents++;
}
// getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 显示学生信息的方法
public void displayInfo() {
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("性别: " + gender);
System.out.println("成绩: " + score);
System.out.println("活动状态: " + isActive);
System.out.println("课程数: " + (courses != null ? courses.length : 0));
}
public static void main(String[] args) {
System.out.println("=== 创建第一个学生 ===");
Student student1 = new Student();
student1.displayInfo();
System.out.println("\n=== 创建第二个学生 ===");
Student student2 = new Student("张三", 20);
student2.displayInfo();
System.out.println("\n=== 通过setter修改学生1信息 ===");
student1.setName("李四");
student1.displayInfo();
System.out.println("\n总学生数: " + Student.totalStudents);
}
}
初始化顺序和执行结果
当运行上面的代码时,输出结果如下:
执行静态初始化块
=== 创建第一个学生 ===
执行实例初始化块
姓名: 未知学生
年龄: 18
性别: 未知
成绩: 0.0
活动状态: false
课程数: 1
=== 创建第二个学生 ===
执行实例初始化块
姓名: 张三
年龄: 20
性别: 未知
成绩: 0.0
活动状态: false
课程数: 3
=== 通过setter修改学生1信息 ===
姓名: 李四
年龄: 18
性别: 未知
成绩: 0.0
活动状态: false
课程数: 1
总学生数: 102
初始化的优先级顺序
静态初始化块(类加载时,仅执行一次)
2. 显式初始化
3. 实例初始化块(每次创建对象时执行)
4. 构造器初始化
- 默认初始化:基本类型有默认值,引用类型为null
- 显式初始化:在声明变量时直接赋值
- 代码块初始化:静态代码块类加载时执行,实例代码块每次创建对象时执行
- 构造器初始化:通过构造函数的参数进行灵活初始化
- setter方法:可以在对象创建后动态修改成员变量的值
选择合适的初始化方式取决于具体的业务需求,一般情况下推荐使用构造器进行必要的初始化,使用setter方法进行后续的修改。