Java成员变量案例如何初始化

wen java案例 30

本文目录导读:

Java成员变量案例如何初始化

  1. 案例:学生信息管理系统
  2. 初始化顺序和执行结果
  3. 初始化的优先级顺序

在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方法进行后续的修改。

抱歉,评论功能暂时关闭!