跳到主要内容Java 面向对象入门:类、对象与封装核心详解 | 极客日志Javajava
Java 面向对象入门:类、对象与封装核心详解
Java 面向对象编程从生活案例切入,解析类与对象的核心关系。类作为设计图定义属性与方法,对象则是具体实例。通过 Phone 示例演示类的定义、对象的创建及成员访问。重点讲解封装特性,利用 private 关键字保护数据,配合 set/get 方法实现安全访问与校验。掌握面向对象思想、类结构语法及封装规范,为后续学习构造方法与继承奠定基础。
Elasticer3 浏览 Java 面向对象入门:类、对象与封装核心详解

🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA 后端开发学习者
❄️个人专栏:C 语言、数据结构(C 语言)、EasyX、JAVA、游戏、规划、程序人生
✨ 从来绝巘须孤往,万里同尘即玉京

一、初识面向对象
什么是面向对象?
在生活中,我们永远是找「能干活的东西」来做对应的事情,而不是自己一步步去实现这件事:
- 要洗衣服 → 找【洗衣机】这个东西来洗,不用自己手搓
- 要聊天沟通 → 找【手机】这个东西来聊,不用面对面喊话
- 要敲代码学习 → 找【电脑】这个东西来用,不用手写代码
- 要喝水解渴 → 找【水杯】这个东西来装水,不用双手捧水
核心总结:
面向 → 寻找、找
对象 → 能帮我们干活的、具备特定功能的「东西」
面向对象编程 (OOP) → 拿对象来做对应的事情,核心是「找对象、用对象」
学习重点
面向对象的学习分为两个阶段,循序渐进,缺一不可:
- 学会获取并使用已经存在的对象(比如 Java 自带的
Scanner、Random 对象);
学会自己设计对象,并创建对象来使用(本节课核心内容,重中之重)。
二、类与对象【核心重点】
类和对象的关系
这是面向对象最基础也是最核心的概念,必须理解透彻。
类(class)→ 事物的「设计图/图纸」
类是用来描述一类具有共同特征和行为的事物的抽象概念,是一个模板。
- 特征 → 事物的属性/成员变量(一般是「名词」,比如:手机的品牌、价格、颜色)
- 行为 → 事物的方法/成员方法(一般是「动词」,比如:手机的打电话、玩游戏、发信息)
对象(object)→ 事物的「具体实例/成品」
对象是类的具体体现,是根据类这个设计图,创建出来的实实在在的、能干活的东西。
- 比如:
Phone 类是手机的设计图,根据这个图纸创建出的「小米手机、荣耀手机」就是具体的对象
- 比如:
Student 类是学生的设计图,根据这个图纸创建出的「张三、李四」就是具体的对象
⚠️ 铁律:在 Java 中,必须先设计类,才能创建并使用对象!没有设计图(类),永远造不出成品(对象)。
语法规范
定义类的标准语法
public class 类名 {
数据类型 变量名;
public void 方法名 () {
}
}
命名规范
- 类名:大驼峰命名法,首字母大写,见名知意,比如
Phone、Student。
- 成员变量:小驼峰命名法,首字母小写,比如
brand、price、name。
- 成员方法:小驼峰命名法,动词开头,比如
call()、playGame()。
创建对象的标准语法
对象的使用
创建对象后,我们可以通过对象操作它的「属性」和「行为」:
- 访问/赋值成员变量:
对象名。成员变量名
- 赋值:
p.brand = "小米";
- 取值:
System.out.println(p.brand);
- 调用成员方法:
对象名。成员方法名 (参数)
完整代码示例
开发规范:Java 中分为「JavaBean 类」和「测试类」,各司其职,必须分开写!
示例 1:JavaBean 类 - Phone.java
public class Phone {
String brand;
double price;
public void call () {
System.out.println("手机在打电话");
}
public void playGame () {
System.out.println("手机在玩游戏");
}
}
示例 2:测试类 - PhoneTest.java
public class PhoneTest {
public static void main (String[] args) {
Phone p = new Phone();
p.brand = "小米";
p.price = 1999.98;
System.out.println(p.brand);
System.out.println(p.price);
p.call();
p.playGame();
Phone p2 = new Phone();
p2.brand = "荣耀";
p2.price = 3700.0;
System.out.println(p2.brand);
System.out.println(p2.price);
p2.call();
}
}
✅ 运行结果:每个对象都是独立的,修改 p 的属性不会影响 p2,这是对象的核心特性!
关键概念:JavaBean 类 & 测试类
这是 Java 开发的基础规范,严格遵守,养成好习惯。
- JavaBean 类:专门用来描述一类事物的类,只写属性和行为,永远不写 main 方法。纯描述,无业务逻辑。
- 测试类:专门用来测试 JavaBean 类的类,里面只有
main 方法。在测试类中,可以创建 JavaBean 类的对象、给对象赋值、调用对象的方法。
注意事项
- 一个
.java 源文件中,可以定义多个 class 类,但只能有一个类被 public 修饰;
- 被
public 修饰的类,类名必须和文件名完全一致(大小写都要一致);
- 实际开发中,强烈建议一个文件只定义一个 class 类,可读性更高,便于维护;
- 成员变量的默认值:整数为 0,小数为 0.0,布尔为 false,字符为 \u0000,引用类型为 null。
开发技巧:如何设计一个类?
属性 → 找名词:从需求中提取描述事物的名词,就是成员变量
行为 → 找动词:从需求中提取描述事物的动词,就是成员方法
比如:设计一个 GirlFriend 类 → 名词:姓名、年龄、性别 → 属性;动词:吃饭、睡觉 → 行为。
三、封装【核心重点】
封装的核心思想
封装是 Java 面向对象的三大核心特征之首(封装、继承、多态),核心思想一句话概括:
✨ 对象代表什么,就要封装对应的数据,并提供该数据对应的行为 ✨
简单理解:谁的属性,就归谁管;谁的行为,就归谁做,职责分明,各司其职。
经典案例
- 人画圆 → 画圆这个行为,是圆的行为,不是人的行为 → 人调用圆的画圆方法
- 人关门 → 关门这个行为,是门的行为,不是人的行为 → 人调用门的关门方法
- 张三砍李四 → 被砍这个行为,是李四的行为,不是张三的行为 → 张三调用李四的被砍方法
这个思想贯穿 Java 开发的始终,学会封装,你才算真正入门面向对象!
封装的好处
- ✅ 让程序员学会自己设计合理的对象,职责分明,代码逻辑更清晰;
- ✅ Java 官方按照封装思想设计了大量的对象(JDK API),我们可以直接拿来用,降低学习成本;
- ✅ 封装可以保护成员变量,避免外部随意修改,提高代码的安全性;
- ✅ 提高代码的复用性和可维护性,修改内部逻辑不会影响外部调用。
private 关键字:封装的核心实现手段
要实现封装,必须用到 private 关键字,这是 Java 中最常用的权限修饰符。
核心特点
private 可以修饰成员变量和成员方法(类的成员);
- 被
private 修饰的成员,只能在当前类中访问和使用,在其他类中完全不可见;
private 的权限范围:本类可见,外部类不可见,是 Java 中权限最小的修饰符。
为什么要用 private?
在没有封装之前,我们直接通过 对象名。成员变量 给属性赋值,外部可以随意修改属性的值,没有任何限制,会导致数据不安全。比如:给 GirlFriend 的 age 赋值为 -18,这是非法数据,但代码不会报错,这就是数据泄露的问题。
而用 private 修饰成员变量后,外部无法直接访问,必须通过我们提供的方法来赋值和取值,我们可以在方法中添加数据校验逻辑,保证数据的合法性,这就是封装的核心价值!
封装的标准步骤
当我们用 private 修饰成员变量后,外部无法访问,此时必须提供对应的访问方法,这是封装的固定步骤:
- 用
private 关键字修饰所有的成员变量,私有化属性;
- 为每一个私有化的成员变量,提供一对
public 修饰的方法:
- setXxx(参数) 方法:给成员变量赋值,方法名必须是
set+ 变量名首字母大写
- getXxx() 方法:获取成员变量的值,方法名必须是
get+ 变量名首字母大写
- 在
setXxx 方法中,可以添加数据校验逻辑,保证数据的合法性;
- 在
getXxx 方法中,直接返回成员变量的值即可。
完整代码示例
示例 1:JavaBean 类 - GirlFriend.java
public class GirlFriend {
private String name;
private int age;
private String gender;
public void setName (String name) {
this.name = name;
}
public String getName () {
return name;
}
public void setAge (int age) {
if (age >= 18 && age <= 25) {
this.age = age;
} else {
System.out.println("年龄非法!请输入 18~25 之间的数字");
}
}
public int getAge () {
return age;
}
public void setGender (String gender) {
this.gender = gender;
}
public String getGender () {
return gender;
}
public void sleep () {
System.out.println("女朋友在睡觉");
}
public void eat () {
System.out.println("女朋友在吃饭");
}
}
示例 2:测试类 - GirlFriendTest.java
public class GirlFriendTest {
public static void main (String[] args) {
GirlFriend gf = new GirlFriend();
gf.setName("小浔浔");
gf.setAge(18);
gf.setGender("女");
System.out.println(gf.getName());
System.out.println(gf.getAge());
System.out.println(gf.getGender());
gf.eat();
gf.sleep();
gf.setAge(30);
System.out.println(gf.getAge());
}
}
✅ 运行结果:非法数据被拦截,数据安全性得到保障,这就是封装的魅力!
封装核心总结
private 是权限修饰符,可修饰成员变量和成员方法;
- 被
private 修饰的成员,仅本类可见,外部类无法直接访问;
- 封装的标准实现:私有化成员变量 + 提供
public 的 setXxx/getXxx 方法;
setXxx 方法:负责给成员变量赋值,可加数据校验,无返回值,有参数;
getXxx 方法:负责获取成员变量的值,有返回值,无参数;
- 封装的核心价值:保护数据安全,提高代码可维护性。
核心知识点总结
✅ 面向对象核心
- 面向对象编程:拿对象做事情,核心是「找对象、用对象」;
- 学习阶段:先使用已有对象,再自定义类创建对象。
✅ 类与对象核心
- 类是设计图,对象是具体实例,先有类后有对象;
- 类的组成:成员变量(属性,名词)+ 成员方法(行为,动词);
- 对象的创建:
类名 对象名 = new 类名 ();;
- 对象的使用:
对象名。属性 赋值/取值,对象名。方法 () 调用行为;
- JavaBean 类:描述事物,无 main 方法;测试类:测试对象,有 main 方法。
✅ 封装核心
- 封装思想:对象代表什么,就封装对应的数据和行为;
- 封装实现:
private 私有化成员变量 + public 的 get/set 方法;
- 封装好处:数据安全、逻辑清晰、提高复用性和可维护性;
setXxx 赋值 + 校验,getXxx 取值,是封装的标准写法。
后续内容
本文是 Java 面向对象的开篇核心内容。面向对象不是一门语法,而是一种编程思想,从面向过程到面向对象,是程序员思维的一次质的飞跃。
很多同学初学面向对象会觉得抽象、迷茫,这是正常的,不用焦虑。面向对象的思想,不是靠记,而是靠练:多写几个类,多创建几个对象,多体会封装的思想,慢慢的你就会发现,面向对象的代码比面向过程的代码更简洁、更优雅、更符合现实世界的逻辑。
下一篇我们会继续讲解面向对象的核心知识点:this 关键字、构造方法、标准 JavaBean 类,这些内容是封装的进阶,也是笔试面试的高频考点。
Java 学习之路,道阻且长,行则将至。愿你在面向对象的世界里,乘风破浪,稳步前行!
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online