类与对象
类与对象是Java面向对象编程的基础概念。
类的概念
什么是类
类是对象的模板/蓝图,定义了对象的属性和行为。
Java
// 定义一个类
public class Person {
// 属性(成员变量)
String name;
int age;
// 行为(方法)
public void speak() {
System.out.println("我叫" + name);
}
public void eat() {
System.out.println(name + "正在吃饭");
}
}
类的组成
- 属性:描述对象特征的变量(成员变量)
- 方法:描述对象行为的函数(成员方法)
对象的概念
什么是对象
对象是类的实例,具有类定义的属性和行为。
Java
// 创建对象
Person person = new Person();
// 使用对象
person.name = "张三";
person.age = 25;
person.speak(); // 输出:我叫张三
person.eat(); // 输出:张三正在吃饭
创建对象语法
Java
// 语法:类名 对象名 = new 类名();
Person p1 = new Person();
Person p2 = new Person();
// p1和p2是两个独立的对象
类与对象关系
关系图解
Java
类(模板) 对象(实例)
Person → Person p1 = new Person()
Person → Person p2 = new Person()
Person → Person p3 = new Person()
一个类可以创建多个对象
类与对象对比
| 类 | 对象 |
|---|---|
| 抽象的模板 | 具体的实例 |
| 定义属性和方法 | 拥有具体的属性值 |
| 不占用内存(静态) | 占用内存空间 |
| 可以创建多个对象 | 一个类的具体实例 |
| 设计图纸 | 按图纸造的产品 |
对象内存结构
对象在内存中
Java
Person p1 = new Person();
p1.name = "张三";
p1.age = 25;
Person p2 = new Person();
p2.name = "李四";
p2.age = 30;
内存示意:
Java
栈内存 堆内存
p1 → 地址1 → Person对象1 {name="张三", age=25}
p2 → 地址2 → Person对象2 {name="李四", age=30}
对象引用存储在栈,对象实体存储在堆。
对象引用
Java
Person p1 = new Person();
Person p2 = p1; // p2指向p1同一个对象
p1.name = "张三";
System.out.println(p2.name); // "张三"(同一对象)
// p1和p2是同一个对象的两个引用
类的定义规范
类命名规则
- 使用大驼峰命名法(UpperCamelCase)
- 类名应描述类的用途
- 避免使用Java关键字
Java
// 正确命名
public class Student { }
public class OrderService { }
public class UserDao { }
// 错误命名(关键字)
public class class { } // 编译错误
类的完整结构
Java
public class Student {
// 1. 属性(成员变量)
private String name;
private int age;
private double score;
// 2. 构造方法
public Student() { }
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 3. 方法
public void study() {
System.out.println(name + "正在学习");
}
public void showInfo() {
System.out.println("姓名:" + name + ", 年龄:" + age);
}
}
使用对象
访问属性
Java
Student student = new Student();
// 设置属性
student.name = "王五";
student.age = 20;
// 获取属性
String name = student.name;
int age = student.age;
调用方法
Java
Student student = new Student();
student.name = "赵六";
// 调用方法
student.study(); // 输出:赵六正在学习
student.showInfo(); // 输出:姓名:赵六, 年龄:18
null引用
null表示无对象
Java
Person p = null; // p不指向任何对象
// 错误:空指针异常
p.name = "张三"; // NullPointerException
p.speak(); // NullPointerException
使用null引用访问属性或方法会抛NullPointerException。
空引用检查
Java
Person p = null;
if (p != null) {
p.speak(); // 安全调用
}
// 或使用Optional(Java 8+)
Optional.ofNullable(p).ifPresent(person -> person.speak());
对象生命周期
创建到销毁
text
// 1. 创建对象
Person p = new Person();
// 2. 使用对象
p.name = "张三";
p.speak();
// 3. 对象变为垃圾
p = null; // 原对象失去引用,等待GC回收
垃圾回收
当一个对象没有任何引用指向时,成为垃圾,由JVM自动回收。
text
Person p1 = new Person();
Person p2 = new Person();
p1 = p2; // 原p1对象失去引用,成为垃圾
要点总结
- 类是对象的模板,定义属性和方法
- 对象是类的实例,通过new关键字创建
- 类是抽象的,对象是具体的
- 一个类可以创建多个对象
- 对象引用在栈,对象实体在堆
- 对象属性通过对象名.属性访问
- 对象方法通过对象名.方法()调用
- null表示不指向任何对象
- 空引用访问会抛NullPointerException
- 对象失去引用后成为垃圾,由GC回收
📝 发现内容有误?点击此处直接编辑