CodeGym /课程 /JAVA 25 SELF /类的结构:字段、方法、构造器

类的结构:字段、方法、构造器

JAVA 25 SELF
第 14 级 , 课程 2
可用

1. 类的字段:对象状态存放在哪里

字段是声明在类内部、但在所有方法之外的变量。字段用于让每个对象都有自己的“状态”。例如,如果我们有类 Person,那么字段可以是:

  • name — 人的名字
  • age — 年龄
  • balance — 账户余额(如果我们在做一个银行应用)
  • isStudent — 标记此人是否为学生

字段声明语法

字段的声明类似于普通变量,只是它不在方法内部,而是直接位于类中:

public class Person {
    String name;
    int age;
}

这里我们声明了两个字段:字符串 name 和整型 age。每个字段都属于该类的具体对象。这意味着不同对象会有各自的取值。例如:

Person p1 = new Person();
p1.name = "奥莉娅";
p1.age = 20;

Person p2 = new Person();
p2.name = "伊戈尔";
p2.age = 25;

第一个对象的名字是“奥莉娅”,年龄是 20;第二个对象是“伊戈尔”,年龄是 25。它们都由同一个类创建,但它们的字段保存着不同的数据。

访问修饰符(public/private)

字段可以是公开的(public)或私有的(private)。现实生活中你不会把自己的银行余额告诉所有人,对吧?所以在编程中我们也常把字段设为 private,这样其他类就不能直接访问它们。这是封装原则的一部分(详细内容将在后续课程中介绍)。

示例:

public class Person {
    private String name;
    private int age;
}

暂时我们不做更多扩展,但请记住:如果字段是 private,就不能从其他类直接访问它。

2. 类的方法:对象“如何行动”

方法是描述对象行为的函数。方法让对象能够做事:说话、计算、奔跑、跳跃、输出自己的信息等等。

方法声明语法

return_type methodName(parameters) {
    // 方法体
}

输出“你好”的方法示例:

public void sayHello() {
    System.out.println("你好!我叫 " + name);
}

在这里:

  • public — 访问修饰符。
  • void — 方法不返回任何值(只是去做一件事)。
  • sayHello — 方法名。
  • 方法体中我们使用字段 name 来向用户打招呼。

再一个示例:返回年龄的方法

public int getAge() {
    return age;
}

方法可以返回值(intString 等),也可以什么都不返回——这种情况下写 void

3. 构造器:对象是如何“诞生”的

构造器是创建新对象时被调用的特殊方法。它的任务是用初始值来初始化对象的字段,也就是把对象的“空口袋”填上具体数据。例如,可以在人被创建的那一刻就指定名字和年龄,而不是让它们保持为空。

  • 构造器的名字总是与类名相同。
  • 构造器没有返回类型(甚至不写 void)。
  • 构造器可以带参数(例如名字和年龄),也可以不带参数。

构造器示例

public class Person {
    String name;
    int age;

    // 带两个参数的构造器
    public Person(String name, int age) {
        this.name = name; // this.name — 对象的字段,name — 构造器的参数
        this.age = age;
    }
}

你可能会好奇 this 是什么。关键字 this 是对当前对象的引用(从对象内部看自己)。我们用它来区分与参数同名的字段。如果没有 this,编译器就会弄不清楚我们到底要初始化谁。

默认构造器

如果你没有声明任何构造器,Java 编译器会自动添加一个不带参数的空构造器。它看起来像这样:

public Person() {
    // 什么也不做,但允许不带参数地创建对象
}

但是!如果你声明了至少一个自己的构造器(例如带参数的),那么默认构造器将不会被自动生成!如果你需要它——就显式写出来。

4. 一个完整类的示例

让我们把所有内容合在一起:字段、方法、构造器。

public class Person {
    String name;
    int age;

    // 构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法:打招呼
    public void sayHello() {
        System.out.println("你好!我叫 " + name + ",我 " + age + " 岁。");
    }

    // 方法:年龄加 1
    public void haveBirthday() {
        age = age + 1;
        System.out.println("太棒了!我现在 " + age + " 岁了!");
    }
}

在程序中如何使用?

public class Main {
    public static void main(String[] args) {
        Person user = new Person("瓦夏", 18);
        user.sayHello();      // 你好!我叫 瓦夏,我 18 岁。
        user.haveBirthday();  // 太棒了!我现在 19 岁了!
    }
}

5. 实践:扩展你的应用

假设你在做一个简单的用户管理应用。上一节课我们只是在 main 里使用变量和方法。现在创建我们自己的类 User,包含字段、方法和构造器。

public class User {
    String username;
    int score;

    // 构造器
    public User(String username, int score) {
        this.username = username;
        this.score = score;
    }

    // 方法:输出用户信息
    public void printInfo() {
        System.out.println("用户名: " + username + ",积分: " + score);
    }

    // 方法:增加积分
    public void addScore(int points) {
        score += points;
        System.out.println(username + " 获得了 " + points + " 分!他现在有 " + score + " 分。");
    }
}

用法:

public class Main {
    public static void main(String[] args) {
        User alice = new User("Alice", 10);
        User bob = new User("Bob", 5);

        alice.printInfo(); // 用户名: Alice,积分: 10
        bob.printInfo();   // 用户名: Bob,积分: 5

        alice.addScore(7); // Alice 获得了 7 分!他现在有 17 分。
        bob.addScore(3);   // Bob 获得了 3 分!他现在有 8 分。
    }
}

注意:每个对象都有自己的字段,一个对象的修改不会影响另一个。

6. 关于访问修饰符的简述

在我们的示例中,字段是公开的(String name;)。在实际开发中,往往把字段设为 private,以防止它们被其他类意外(或故意)修改。关于封装会在相关专题中详细讲解,先看这个示例:

public class User {
    private String username;
    private int score;

    public User(String username, int score) {
        this.username = username;
        this.score = score;
    }

    public void printInfo() {
        System.out.println("用户名: " + username + ",积分: " + score);
    }

    public void addScore(int points) {
        score += points;
    }
}

现在如果有人尝试在类外写 alice.score = 100500; —— 编译器会说“不可以!”。

7. 使用字段、方法和构造器时的常见错误

错误 1:未初始化的字段。
如果你不给字段赋值,它们会得到默认值:数字是 0booleanfalse,引用类型(例如 String)是 null。如果忘了初始化字段,可能会得到意外结果,甚至在尝试对它做某些操作时抛出 NullPointerException

错误 2:混淆参数和字段。
在构造器里,新手常写成 name = name;——这并不会初始化字段,而只是让参数给自己赋值。一定要使用 this.name = name

错误 3:缺少默认构造器。
如果你声明了带参数的构造器,却忘了显式添加无参构造器,那么 new Person() 将无法使用。

错误 4:把方法名和类名弄成一样。
在 Java 中,构造器的名字必须与类名相同,但方法的名字不应该相同。有时会误把方法命名得和类一样,编译器就会报错。

错误 5:忽略访问修饰符。
如果把字段设为 public,那么它们可以在任何地方被修改——这对大型程序来说很危险。最好从一开始就习惯使用 private,并通过方法来进行访问。

1
任务
JAVA 25 SELF, 第 14 级, 课程 2
已锁定
虚拟展厅中的梦想汽车
虚拟展厅中的梦想汽车
1
任务
JAVA 25 SELF, 第 14 级, 课程 2
已锁定
快速注册新学生
快速注册新学生
1
任务
JAVA 25 SELF, 第 14 级, 课程 2
已锁定
数字事件计数器
数字事件计数器
1
任务
JAVA 25 SELF, 第 14 级, 课程 2
已锁定
银行账户管理
银行账户管理
评论 (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
逢考必过` 级别 21,Shandong,China
23 七月 2026
计数器这一题在一个文件里还是创建两个文件都验证不过去,有没有大佬知道怎么做