类与对象
概述
类(Class)是对象的模板或蓝图,用来描述一类事物具有的数据(成员变量)和行为(方法)。对象(Object)是类的一个实例,通过 new 关键字根据类「创建」出来。类是抽象定义,对象是具体存在;一个类可以创建多个对象,每个对象拥有各自的数据。
掌握类与对象是 Java 面向对象编程(OOP)的起点,后续的 封装、继承、多态 都建立在这一概念之上。
类的基本语法
类由 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.name、p1.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 中除基本类型(如 int、double)外,其它类型都是引用类型。变量中保存的是对象的引用(可理解为「地址」),而不是对象本身。
- 未指向任何对象时,引用变量的值为
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
- 变量与数据类型 — 基本类型与引用类型
- Oracle Java 教程 - 类和对象