Skip to content

类与对象

概述

(Class)是对象的模板蓝图,用来描述一类事物具有的数据(成员变量)和行为(方法)。对象(Object)是类的一个实例,通过 new 关键字根据类「创建」出来。类是抽象定义,对象是具体存在;一个类可以创建多个对象,每个对象拥有各自的数据。

掌握类与对象是 Java 面向对象编程(OOP)的起点,后续的 封装继承多态 都建立在这一概念之上。

前置建议

已掌握 变量与数据类型流程控制,能编写带 main 的 Java 程序。


类的基本语法

类由 class 关键字定义,内部可包含成员变量(描述状态)和方法(描述行为)。

类定义格式

java
// 修饰符 class 类名 {
//     成员变量(字段)
//     方法
// }
public class Person {
    // 成员变量:描述「人」具有的数据
    String name;
    int age;

    // 方法:描述「人」能做什么
    void sayHello() {
        System.out.println("Hello, I'm " + name);
    }
}
  • 类名:使用 PascalCase,与文件名一致(如 Person.java 中类名为 Person)。
  • 成员变量:声明在类体内、方法外,每个对象各有一份拷贝。
  • 方法:定义在类体内,描述对象的行为;可通过 对象.方法() 调用。

提示

一个 .java 源文件中,public 类最多有一个,且该类名必须与文件名相同。非 public 类可以有多个,但通常一个文件只放一个类,便于维护。


对象的创建与使用

对象通过 new 类名() 创建,创建后通过引用来访问其成员变量和方法。

基本用法

java
// 创建对象:new 类名()
Person p1 = new Person();

// 通过引用访问成员变量并赋值
p1.name = "张三";
p1.age = 20;

// 通过引用调用方法
p1.sayHello();   // 输出:Hello, I'm 张三
  • Person p1:声明一个「指向 Person 类型对象」的引用变量。
  • new Person():在堆上创建一个 Person 对象,并返回其引用。
  • p1.namep1.age:访问该对象的成员变量。
  • p1.sayHello():调用该对象的方法;方法内部的 name 即当前对象的 name

使用示例

示例 1:最简单的类与对象

定义一个表示「书」的类,包含书名和作者两个成员变量,以及一个打印信息的方法。

java
public class Book {
    String title;
    String author;

    void printInfo() {
        System.out.println("《" + title + "》 - " + author);
    }
}

// 在 main 或其它方法中使用
public static void main(String[] args) {
    Book b = new Book();
    b.title = "Java 核心技术";
    b.author = "Cay S. Horstmann";
    b.printInfo();   // 《Java 核心技术》 - Cay S. Horstmann
}

示例 2:多个对象与引用

一个类可以创建多个对象,每个对象拥有各自的数据;多个引用可以指向同一对象。

java
Person p1 = new Person();
p1.name = "李四";
p1.age = 25;

Person p2 = new Person();
p2.name = "王五";
p2.age = 30;

// 两个对象,数据互不影响
p1.sayHello();   // Hello, I'm 李四
p2.sayHello();   // Hello, I'm 王五

// 引用赋值:p3 与 p1 指向同一个对象
Person p3 = p1;
p3.age = 26;
System.out.println(p1.age);   // 26,因为 p1 和 p3 指向同一对象

示例 3:带返回值的方法

方法可以带参数和返回值,实现更完整的行为。

java
public class Rectangle {
    double width;
    double height;

    // 带返回值的方法:计算面积
    double getArea() {
        return width * height;
    }

    // 带参数的方法:设置尺寸
    void setSize(double w, double h) {
        width = w;
        height = h;
    }
}

// 使用
Rectangle rect = new Rectangle();
rect.setSize(3.0, 4.0);
System.out.println(rect.getArea());   // 12.0

对象与引用

Java 中除基本类型(如 intdouble)外,其它类型都是引用类型。变量中保存的是对象的引用(可理解为「地址」),而不是对象本身。

  • 未指向任何对象时,引用变量的值为 null。此时访问 null 的成员或调用方法会抛出 NullPointerException
  • 引用赋值时,两个引用可能指向同一对象,对其中一个的修改会反映到另一个。
java
Person p = null;
// p.sayHello();   // 运行时报错:NullPointerException

p = new Person();
p.name = "小明";
p.sayHello();      // 正常执行

注意

使用引用类型变量前,应确保它已指向有效对象(不为 null)。在方法中可先做 if (p != null) 判断,或通过 构造方法 在创建对象时完成初始化,避免空指针。


注意事项

  • 类名与文件名:public 类名必须与 .java 文件名一致,否则编译报错。
  • 成员变量默认值:未显式赋值时,成员变量有默认值(如 int 为 0,boolean 为 false,引用类型为 null)。局部变量没有默认值,使用前必须赋值。
  • 对象与引用:变量存的是引用,new 出来的对象在堆上;多个引用可指向同一对象,要注意修改的副作用。
  • null 安全:调用方法或访问成员前,避免引用为 null,否则会抛出 NullPointerException

提示

后续将学习 构造方法 在创建对象时完成初始化,以及 封装与访问修饰符private 保护成员变量、用 getter/setter 提供访问,使类更安全、易维护。


相关链接

基于 VitePress 构建