Java 初识面向对象:类与对象 + 封装核心
1. 面向对象编程(OOP) vs 面向过程
| 维度 | 面向过程(Process-Oriented) | 面向对象(Object-Oriented) |
|---|---|---|
| 思考方式 | 以步骤为核心 | 以对象为核心 |
| 代表语言 | C | Java、C++、Python 等 |
| 优点 | 流程清晰,适合简单脚本 | 代码复用性高、易维护、易扩展 |
| 核心思想 | “先做什么,再做什么” | “找到合适的对象,让对象干活” |
Java 是纯面向对象的语言,所有代码必须写在类里面。
2. 类(Class)与 对象(Object)
- 类:是对一类事物的抽象描述(蓝图、模板)。
- 对象:是类具体实例化后的产物(真实存在的东西)。
通俗比喻:
- 类 = 汽车设计图纸
- 对象 = 用图纸造出来的具体一辆汽车(宝马、奔驰都可以)
定义类的语法
public class 类名 {
// 1. 成员变量(属性、字段)
// 2. 成员方法(行为)
// 3. 构造方法
}
示例:定义一个学生类
public class Student {
// 成员变量(字段)
String name; // 姓名
int age; // 年龄
String studentId; // 学号
// 成员方法(行为)
public void study() {
System.out.println(name + "正在学习...");
}
public void eat() {
System.out.println(name + "正在吃饭");
}
}
3. 创建对象与使用对象
public class TestStudent {
public static void main(String[] args) {
// 创建对象(实例化)
Student s1 = new Student();
Student s2 = new Student();
// 通过对象.成员 的方式访问
s1.name = "张三";
s1.age = 20;
s1.studentId = "2024001";
s2.name = "李四";
s2.age = 21;
s1.study(); // 张三正在学习...
s2.eat(); // 李四正在吃饭
}
}
new 关键字:在堆内存中开辟空间,创建对象。
4. 封装(Encapsulation)—— OOP 三大特性之首
核心思想:隐藏内部实现细节,只暴露必要接口,保护数据安全。
封装的实现步骤(标准写法)
- 将成员变量用
private修饰(私有化) - 提供
public的 getter 和 setter 方法 - 可以在 setter 中加入数据校验逻辑
public class Student {
// 私有化成员变量
private String name;
private int age;
private String studentId;
// Getter 方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
// Setter 方法(带校验)
public void setName(String name) {
if (name != null && name.length() > 0) {
this.name = name;
}
}
public void setAge(int age) {
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
}
为什么这样写?
- 外部无法直接修改
age = -1000这种非法数据 - 代码维护性更好,后期改内部实现不影响外部调用
5. this 关键字
this 代表当前对象自身。
常见用途:
public class Student {
private String name;
public void setName(String name) {
this.name = name; // 区分形参和成员变量
}
public void show() {
System.out.println(this.name); // this 可以省略
}
}
6. 构造方法(Constructor)
- 作用:创建对象时给成员变量初始化
- 特点:
- 方法名与类名完全相同
- 没有返回值(连 void 都不写)
- 系统默认提供一个无参构造方法
public class Student {
private String name;
private int age;
// 无参构造
public Student() {
System.out.println("无参构造被调用");
}
// 有参构造(推荐)
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
使用:
Student s1 = new Student(); // 调用无参
Student s2 = new Student("张三", 20); // 调用有参
注意:一旦你写了有参构造,系统不再提供默认无参构造。
7. 内存图简析(非常重要)
- 类文件(.class)在方法区
- 对象实例在堆内存
- 引用变量(s1、s2)在栈内存,保存堆中对象的地址
多个引用指向同一个对象时,修改一个会影响所有。
总结:核心要点记忆口诀
- 类是模板,对象是实体
- 封装 = private + getter/setter
- 构造方法用于初始化
- this 代表当前对象
- new 关键字创建对象
练习建议(立即动手):
- 写一个
Phone类(品牌、价格、颜色),封装好属性,提供构造方法和 getter/setter - 写一个
Account类(账号、余额),余额不能为负 - 尝试创建多个对象,观察
this的作用
想继续深入哪个部分?
- 下一讲:继承(extends)与方法重写 + 多态
- 静态成员(static) 详解
- 包、权限修饰符、代码块
- Java 内存模型图解
告诉我你的进度或具体想重点掌握的内容,我继续给你写下一节!