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

文章目录
- ✨Java面向对象精讲(二):this关键字+构造方法+标准JavaBean|吃透封装进阶语法
-
- [📌 文章摘要(246字)](#📌 文章摘要(246字))
-
- [🕒 阅读时长](#🕒 阅读时长)
- [✅ 适用人群 & 阅读重点](#✅ 适用人群 & 阅读重点)
- [📖 知识回顾(课前必看,快速衔接)](#📖 知识回顾(课前必看,快速衔接))
- [一、this关键字 🔍 区分变量&指向对象,封装必备](#一、this关键字 🔍 区分变量&指向对象,封装必备)
-
- [1.1 为什么需要this关键字?(解决实际问题)](#1.1 为什么需要this关键字?(解决实际问题))
-
- [✅ 问题代码示例](#✅ 问题代码示例)
- [1.2 this关键字的基础用法(必会语法)](#1.2 this关键字的基础用法(必会语法))
-
- [✅ 解决问题后的代码](#✅ 解决问题后的代码)
- [1.3 this关键字的本质(必懂,理解内存更重要)](#1.3 this关键字的本质(必懂,理解内存更重要))
- [1.4 this关键字的内存图解析(直观理解,不再抽象)](#1.4 this关键字的内存图解析(直观理解,不再抽象))
- [1.5 this关键字的使用注意事项(易错点,避坑指南)](#1.5 this关键字的使用注意事项(易错点,避坑指南))
- [1.6 this关键字核心总结(必背)](#1.6 this关键字核心总结(必背))
- [二、构造方法 🛠️ 对象初始化神器,开发必备](#二、构造方法 🛠️ 对象初始化神器,开发必备)
-
- [2.1 构造方法的概述(必背定义)](#2.1 构造方法的概述(必背定义))
-
- [✅ 核心认知纠正(笔试高频坑)](#✅ 核心认知纠正(笔试高频坑))
- [2.2 构造方法的标准格式(固定写法,直接套用)](#2.2 构造方法的标准格式(固定写法,直接套用))
-
- [✔ 构造方法的三大核心特点(必背,笔试高频)](#✔ 构造方法的三大核心特点(必背,笔试高频))
- [2.3 构造方法的分类与使用(必会)](#2.3 构造方法的分类与使用(必会))
-
- [✔ ① 无参构造方法(空参构造)](#✔ ① 无参构造方法(空参构造))
- [✔ ② 带参构造方法(有参构造)](#✔ ② 带参构造方法(有参构造))
- [✔ 构造方法的调用(自动调用,无需手动)](#✔ 构造方法的调用(自动调用,无需手动))
- [2.4 构造方法的注意事项(高频考点,必背无遗漏)](#2.4 构造方法的注意事项(高频考点,必背无遗漏))
- [2.5 构造方法与setXxx方法的区别(易混点,清晰区分)](#2.5 构造方法与setXxx方法的区别(易混点,清晰区分))
-
- [✅ 实际开发使用原则](#✅ 实际开发使用原则)
- [2.6 构造方法完整代码示例(可直接运行,企业级规范)](#2.6 构造方法完整代码示例(可直接运行,企业级规范))
- [三、标准JavaBean类 📋 企业开发统一规范,必须掌握](#三、标准JavaBean类 📋 企业开发统一规范,必须掌握)
-
- [3.1 什么是标准JavaBean类?](#3.1 什么是标准JavaBean类?)
- [3.2 标准JavaBean类的硬性要求(必背,严格遵守)](#3.2 标准JavaBean类的硬性要求(必背,严格遵守))
- [3.3 标准JavaBean类编写示例(手把手教,企业级实战)](#3.3 标准JavaBean类编写示例(手把手教,企业级实战))
-
- 需求:编写一个`User`类(用户类),包含属性:用户名(name)、密码(pwd)、邮箱(email)、性别(gender)、年龄(age),按标准JavaBean规范编写。
- [✅ 标准JavaBean类 - User.java(可直接复制使用)](#✅ 标准JavaBean类 - User.java(可直接复制使用))
- [✅ 测试类 - UserTest.java(使用标准JavaBean)](#✅ 测试类 - UserTest.java(使用标准JavaBean))
- [3.4 开发神器:快捷键生成标准JavaBean(效率翻倍,必会)](#3.4 开发神器:快捷键生成标准JavaBean(效率翻倍,必会))
-
- [✔ 核心快捷键(IDEA)](#✔ 核心快捷键(IDEA))
- [✔ 分步生成步骤](#✔ 分步生成步骤)
- [✔ 进阶插件:PTG(1秒生成JavaBean)](#✔ 进阶插件:PTG(1秒生成JavaBean))
- [3.5 标准JavaBean类核心总结(必背)](#3.5 标准JavaBean类核心总结(必背))
- [✨ 核心知识点总结(精华提炼,查漏补缺)](#✨ 核心知识点总结(精华提炼,查漏补缺))
-
- [✅ this关键字核心](#✅ this关键字核心)
- [✅ 构造方法核心](#✅ 构造方法核心)
- [✅ 标准JavaBean核心](#✅ 标准JavaBean核心)
- [✍️ 写在最后](#✍️ 写在最后)
✨Java面向对象精讲(二):this关键字+构造方法+标准JavaBean|吃透封装进阶语法
📌 文章摘要(246字)
本文是Java面向对象系列第二篇核心进阶,承接上篇类与对象、封装知识,全覆盖this关键字、构造方法、标准JavaBean类三大核心考点,也是企业开发与笔试面试的高频内容。从内存原理角度拆解this关键字的本质与用法,彻底讲清构造方法的初始化作用、重载规则及使用细节,手把手教你编写符合企业规范的标准JavaBean类,搭配完整可运行代码、内存图解析、开发快捷键技巧与易错点避坑。内容由浅入深、图文结合,零基础能看懂,进阶者能夯实。学完本文可独立完成高规范的JavaBean类开发,打通"封装-初始化-标准化编码"的逻辑闭环,是吃透Java面向对象的关键内容。
🕒 阅读时长
约15分钟
✅ 适用人群 & 阅读重点
▫️ Java零基础入门者 :重点看this关键字的基础用法、构造方法的定义格式、标准JavaBean的固定写法,能照猫画虎编写规范代码。
▫️ 在校学生/备考笔试者 :重点吃透this关键字的本质、构造方法的特点与注意事项、JavaBean的规范要求,这些是笔试填空/简答高频考点。
▫️ 开发入门夯实基础者 :重点看构造方法的重载、JavaBean开发快捷键、this在构造方法中的使用,贴合企业实际开发规范。
▫️ 初学面向对象迷茫者 :重点看内存图解析、代码示例的逐行讲解,理解抽象语法背后的实际运行逻辑。
▫️ 复习巩固者:直接看「知识回顾+核心总结」,快速梳理知识点,强化记忆易混点。
📖 知识回顾(课前必看,快速衔接)
在上一篇内容中,我们掌握了Java面向对象的基础:理解了面向对象的核心思想,学会了设计类、创建对象、使用对象 ,并掌握了封装的核心思想,通过private关键字私有化成员变量,提供public的setXxx/getXxx方法实现属性的安全赋值与取值,保证了数据的安全性。
但在上篇的封装代码中,我们发现了一个问题:setXxx方法中出现了成员变量与局部变量同名的情况,此时该如何区分?创建对象时,能否在创建的同时直接给成员变量赋值,而非多次调用set方法?如何编写一套符合企业全规范的实体类?这就是本文要解决的核心问题,让我们的面向对象编码更规范、更高效。
一、this关键字 🔍 区分变量&指向对象,封装必备
1.1 为什么需要this关键字?(解决实际问题)
在封装的setXxx方法中,我们会遇到成员变量(类中方法外)和局部变量(方法内/形参)同名 的情况,而Java中默认遵循「局部变量优先」的原则,此时直接写变量名,程序会识别为局部变量,无法给成员变量赋值。
✅ 问题代码示例
java
public class GirlFriend {
private String name; // 成员变量
// setName方法:形参name是局部变量,与成员变量同名
public void setName(String name) {
name = name; // 局部变量给局部变量赋值,成员变量未被赋值!
}
}
此时调用gf.setName("小浔浔"),成员变量name依然是默认值null,这就是变量名冲突导致的问题,而this关键字就是解决这个问题的核心。
1.2 this关键字的基础用法(必会语法)
当成员变量和局部变量同名时,在成员变量名前加上this.,即可明确表示引用的是「类中的成员变量」,从而区分同名的局部变量。
✅ 解决问题后的代码
java
public class GirlFriend {
private String name; // 成员变量
public void setName(String name) {
this.name = name; // this.name → 成员变量;name → 局部变量(形参)
}
}
此时调用gf.setName("小浔浔"),就能成功给成员变量name赋值,问题完美解决!
1.3 this关键字的本质(必懂,理解内存更重要)
很多同学只记住了this.的用法,却不懂其本质,这会影响后续的进阶学习,this的本质是:当前方法调用者的对象内存地址值 ,是一个引用类型,指向当前对象本身。
简单来说:哪个对象调用了包含this的方法,this就代表哪个对象,this中存储的就是这个对象的堆内存地址。
1.4 this关键字的内存图解析(直观理解,不再抽象)
以Student类的setName方法为例,结合内存分布,彻底讲清this的运行逻辑:
示例代码
java
public class Student {
private String name;
public void setName(String name) {
this.name = name; // 核心行
}
}
public class StudentTest {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("付小玲"); // s1调用setName方法
Student s2 = new Student();
s2.setName("桥小久"); // s2调用setName方法
}
}
核心内存运行逻辑
- 执行
new Student()时,JVM在堆内存开辟空间,创建对象,分配唯一地址(如s1→0x00000012,s2→0x00000024); - 调用
s1.setName("付小玲")时,JVM在栈内存 创建setName方法的栈帧,自动将s1的地址0x00000012赋值给this; - 执行
this.name = name时,通过this的地址找到堆中s1的对象,将形参的"付小玲"赋值给该对象的成员变量name; - 调用
s2.setName("桥小久")时,同理,this被赋值为s2的地址0x00000024,操作的是堆中s2的对象,与s1互不影响。
✅ 核心结论:this是方法的隐藏参数,JVM会在调用对象方法时自动传递,无需程序员手动定义,其值就是调用者对象的地址。
1.5 this关键字的使用注意事项(易错点,避坑指南)
- this关键字只能在类的成员方法中使用,不能在静态方法(static修饰)中使用(静态方法无对象调用,后续会讲);
- this可以直接访问类的成员变量 和成员方法 ,格式:
this.成员变量、this.成员方法(); - this关键字可以作为方法的返回值,返回当前对象(进阶用法,后续讲解);
- this在方法中可以省略,当成员变量和局部变量不同名时,
this.可直接不写,程序会默认引用成员变量。
1.6 this关键字核心总结(必背)
- 基础作用:区分同名的成员变量和局部变量 ,
this.指向成员变量; - 本质:当前方法调用者的对象地址,哪个对象调用方法,this就指向哪个对象;
- 自动传递:JVM自动为成员方法分配this参数,无需手动定义;
- 核心格式:
this.成员变量名、this.成员方法名()。
二、构造方法 🛠️ 对象初始化神器,开发必备
2.1 构造方法的概述(必背定义)
构造方法也叫构造器、构造函数 ,是Java类中一种特殊的方法,其唯一作用 是:在创建对象时,由JVM自动调用,为对象的成员变量完成初始化(赋值),是对象创建过程中的关键步骤。
✅ 核心认知纠正(笔试高频坑)
❌ 错误说法:构造方法是用来创建对象的。
✅ 正确说法:new关键字才是真正创建对象的核心 ,构造方法只是new创建对象时的其中一步,仅负责成员变量初始化,对象的创建还包括加载类、开辟堆空间、默认初始化等步骤。
2.2 构造方法的标准格式(固定写法,直接套用)
构造方法是特殊的方法,有严格的格式要求,必须完全遵守,否则编译器会识别为普通方法:
java
public class 类名 {
// 构造方法
修饰符 类名(参数列表) {
方法体; // 一般为成员变量赋值,完成初始化
}
}
✔ 构造方法的三大核心特点(必背,笔试高频)
- 方法名与类名完全一致 :包括大小写,比如类名
Student,构造方法名也必须是Student; - 无返回值类型 :连
void关键字都不能写,这是与普通方法最直观的区别; - 无具体返回值 :方法体中不能用
return带回任何结果数据(可写空return)。
2.3 构造方法的分类与使用(必会)
构造方法分为无参构造方法 和带参构造方法,两者配合使用,满足不同的初始化需求。
✔ ① 无参构造方法(空参构造)
- 格式:无参数,方法体可空,也可手动写初始化逻辑;
- 作用:创建对象时,给成员变量赋默认值(或手动指定的固定值)。
java
public class Student {
private String name;
private int age;
// 无参构造方法
public Student() {
// 可空,也可手动初始化
// this.name = "未知姓名";
// this.age = 0;
}
}
✔ ② 带参构造方法(有参构造)
- 格式:包含参数列表,参数一般与成员变量对应;
- 作用:创建对象的同时,直接给成员变量赋指定值,无需后续调用set方法,简化代码。
java
public class Student {
private String name;
private int age;
// 带参构造方法(参数与成员变量对应)
public Student(String name, int age) {
this.name = name; // 用this区分同名变量,给成员变量赋值
this.age = age;
}
}
✔ 构造方法的调用(自动调用,无需手动)
构造方法由JVM在创建对象时自动调用,无需程序员手动调用,创建一次对象,就调用一次构造方法:
java
// 调用无参构造,创建对象并默认初始化
Student s1 = new Student();
// 调用带参构造,创建对象的同时赋值name="阿强",age=23
Student s2 = new Student("阿强", 23);
2.4 构造方法的注意事项(高频考点,必背无遗漏)
这是笔试面试的高频考点,也是初学者的易混点,必须逐条牢记,零失分 ✔️
- 默认无参构造 :如果程序员没有手动定义任何构造方法 ,JVM会自动为类添加一个默认的无参构造方法,方法体为空;
- 默认构造失效 :如果程序员手动定义了任意构造方法 (无参/带参),JVM将不再提供默认的无参构造方法;
- 手动写无参构造 :无论是否定义带参构造,推荐手动书写无参构造方法,避免后续创建对象时报错;
- 构造方法重载 :多个构造方法方法名相同(与类名一致),参数列表不同(个数/类型/顺序),属于方法重载,这是核心用法;
- 调用次数 :每
new一次对象,就会调用一次构造方法,创建N个对象则调用N次; - 修饰符 :构造方法一般用
public修饰,保证外部类能创建对象(后续会讲其他修饰符); - 不能手动调用 :构造方法只能由JVM在new对象时调用,不能通过
对象名.构造方法名()手动调用。
2.5 构造方法与setXxx方法的区别(易混点,清晰区分)
很多同学分不清构造方法和setXxx方法的使用场景,两者都能给成员变量赋值,核心区别在赋值时机 和使用目的:
| 对比维度 | 构造方法 | setXxx方法 |
|---|---|---|
| 赋值时机 | 创建对象时赋值,仅能赋值一次 | 创建对象后赋值,可多次赋值 |
| 核心目的 | 完成对象的初始化 | 完成对象属性的修改/重新赋值 |
| 调用方式 | JVM自动调用,无需手动 | 程序员手动通过对象调用 |
| 参数 | 可无参/带参 | 必须带参(要赋值的内容) |
| 返回值 | 无返回值类型 | 无返回值(void) |
✅ 实际开发使用原则
- 创建对象时,确定属性的初始值 → 使用带参构造;
- 创建对象后,需要修改属性值 → 使用setXxx方法;
- 创建对象时,属性值暂时不确定 → 使用无参构造,后续用setXxx方法赋值。
2.6 构造方法完整代码示例(可直接运行,企业级规范)
java
public class Student {
// 私有化成员变量
private String name;
private int age;
// 1. 手动编写无参构造方法(推荐)
public Student() {
System.out.println("无参构造方法被调用,对象创建中...");
}
// 2. 带参构造方法(重载),初始化所有成员变量
public Student(String name, int age) {
this.name = name; // this区分同名变量
this.age = age;
System.out.println("带参构造方法被调用,对象初始化完成!");
}
// 3. get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// 测试类
public class StudentTest {
public static void main(String[] args) {
// 调用无参构造创建对象
Student s1 = new Student();
// 创建对象后用set方法赋值
s1.setName("阿珍");
s1.setAge(24);
System.out.println(s1.getName() + " " + s1.getAge()); // 阿珍 24
// 调用带参构造创建对象,同时赋值
Student s2 = new Student("阿强", 23);
System.out.println(s2.getName() + " " + s2.getAge()); // 阿强 23
// 创建对象后用set方法修改值
s2.setAge(25);
System.out.println(s2.getName() + " " + s2.getAge()); // 阿强 25
}
}
✅ 运行结果:构造方法自动调用,赋值/修改逻辑正常,完全符合开发需求。
三、标准JavaBean类 📋 企业开发统一规范,必须掌握
3.1 什么是标准JavaBean类?
JavaBean类是我们上篇讲的「描述一类事物的类」的企业级标准化版本 ,是Java项目中最基础、最常用的实体类(Entity类),用于封装数据,所有的数据库表、接口返回数据、业务实体,都对应标准的JavaBean类。
标准JavaBean类是遵循Java官方制定的一套固定规范的类,所有程序员都按此规范编写,保证代码的统一性、可读性和可维护性。
3.2 标准JavaBean类的硬性要求(必背,严格遵守)
这是Java开发的行业统一规范,无论是笔试还是企业开发,都必须严格遵守,缺一不可 ✨
- 类名规范 :见名知意,采用大驼峰命名法 ,首字母大写,如
User、Student、Goods; - 成员变量规范 :所有成员变量必须用private关键字私有化,隐藏内部数据;
- 构造方法规范 :必须提供两个构造方法 ,缺一不可:
- 无参构造方法(空参构造);
- 带全部成员变量的带参构造方法;
- 成员方法规范 :
- 为每个私有化的成员变量,提供对应的public修饰的setXxx/getXxx方法;
- 如果类有其他业务行为,添加对应的public成员方法;
- 其他规范 :成员变量和方法的命名遵循小驼峰命名法,见名知意。
3.3 标准JavaBean类编写示例(手把手教,企业级实战)
需求:编写一个User类(用户类),包含属性:用户名(name)、密码(pwd)、邮箱(email)、性别(gender)、年龄(age),按标准JavaBean规范编写。
✅ 标准JavaBean类 - User.java(可直接复制使用)
java
/**
* 用户类 - 标准JavaBean
* 包含:用户名、密码、邮箱、性别、年龄
*/
public class User {
// 1. 私有化所有成员变量
private String name;
private String pwd;
private String email;
private String gender;
private int age;
// 2. 无参构造方法
public User() {
}
// 3. 带全部成员变量的带参构造方法
public User(String name, String pwd, String email, String gender, int age) {
this.name = name;
this.pwd = pwd;
this.email = email;
this.gender = gender;
this.age = age;
}
// 4. 为每个成员变量提供对应的setXxx/getXxx方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
✅ 测试类 - UserTest.java(使用标准JavaBean)
java
public class UserTest {
public static void main(String[] args) {
// 方式1:无参构造 + set方法
User u1 = new User();
u1.setName("张三");
u1.setPwd("123456");
u1.setEmail("zhangsan@163.com");
u1.setGender("男");
u1.setAge(20);
System.out.println(u1.getName() + " " + u1.getEmail()); // 张三 zhangsan@163.com
// 方式2:带参构造直接初始化
User u2 = new User("李四", "654321", "lisi@qq.com", "女", 22);
System.out.println(u2.getName() + " " + u2.getAge()); // 李四 22
}
}
3.4 开发神器:快捷键生成标准JavaBean(效率翻倍,必会)
实际开发中,手动编写setXxx/getXxx和构造方法非常繁琐,IDEA提供了快捷键一键生成,大幅提升编码效率,这是开发必备技巧!
✔ 核心快捷键(IDEA)
- Windows/Linux:
Alt + Insert - Mac:
Alt + Fn + Insert
✔ 分步生成步骤
- 先编写好类的私有化成员变量;
- 按下快捷键,选择Constructor (构造方法),生成无参构造和带全部参数的构造方法;
- 生成无参构造:直接选中无参选项回车;
- 生成带全部参数构造:按
Ctrl + A全选成员变量,回车;
- 再次按下快捷键,选择Getter and Setter ,按
Ctrl + A全选成员变量,回车,一键生成所有setXxx/getXxx方法; - 完成!标准JavaBean类一键生成,无需手动编写。
✔ 进阶插件:PTG(1秒生成JavaBean)
如果觉得快捷键还不够快,可以安装IDEA插件PTG ,支持根据属性名一键生成完整的标准JavaBean类 ,快捷键:Ctrl + Shift + 豆子,开发效率拉满!
3.5 标准JavaBean类核心总结(必背)
- 标准JavaBean是企业开发的统一规范,用于封装数据,是项目基础;
- 核心要求:私有化成员变量 + 无参构造 + 带全参构造 + 全套setXxx/getXxx;
- 开发技巧:使用IDEA快捷键
Alt + Insert一键生成,避免手动编写繁琐代码; - 核心作用:封装数据、保证数据安全、提高代码可维护性,适配企业团队开发。
✨ 核心知识点总结(精华提炼,查漏补缺)
✅ this关键字核心
- 基础用法:区分同名的成员变量和局部变量,
this.指向成员变量; - 本质:当前方法调用者的对象地址,哪个对象调用,this就指向哪个对象;
- 自动传递:JVM为成员方法自动分配,无需手动定义。
✅ 构造方法核心
- 特殊方法,方法名与类名一致,无返回值类型,由JVM自动调用;
- 核心作用:创建对象时为成员变量完成初始化;
- 分类:无参构造、带参构造,支持重载;
- 关键注意:手动定义构造方法后,默认无参构造失效,推荐手动编写无参构造;
- 与setXxx区别:构造方法创建对象时赋值(一次),setXxx创建对象后赋值(多次)。
✅ 标准JavaBean核心
- 企业级统一规范:私有化成员变量 + 无参构造 + 全参构造 + 全套setXxx/getXxx;
- 开发技巧:IDEA快捷键
Alt + Insert一键生成构造方法和set/get; - 核心作用:封装数据,适配团队开发,保证代码规范统一。
✍️ 写在最后
本文是Java面向对象的核心进阶内容,也是企业开发的基础规范内容。this关键字、构造方法、标准JavaBean类,这三个知识点看似独立,实则紧密关联:this解决了变量名冲突问题,构造方法实现了对象的高效初始化,标准JavaBean则将封装、this、构造方法整合,形成了企业开发的统一编码规范。
很多同学初学这些知识点时,会觉得"规则太多、记不住",这是正常的。Java是一门强规范的语言,面向对象的规范更是如此,这些规则不是凭空制定的,而是为了解决实际开发中的问题、适配团队协作而总结的最佳实践。
学习的关键不是死记硬背规则,而是理解规则背后的原因,多动手练习:多写几个标准JavaBean类,用快捷键生成代码,体会this和构造方法的使用场景,慢慢的你就会发现,这些规范会成为你的编码习惯,写代码时会自然而然的遵循。
下一篇我们会继续讲解面向对象的核心底层内容:对象内存图、成员变量与局部变量的区别,这些内容是理解Java面向对象运行机制的关键,能让你从"会写代码"提升到"懂代码为什么这么运行",敬请关注~
希望本文能帮你吃透面向对象的进阶语法,掌握企业级的编码规范。如果觉得内容对你有帮助,欢迎点赞+收藏+关注 ✨,你的支持是我持续更新的最大动力!
Java面向对象的学习,贵在理解和实践。愿你在规范的编码中,夯实基础,稳步进阶!💪
预告:Java面向对象精讲(三)
对象内存图全解析(单对象/多对象/多引用指向同一对象) + 成员变量与局部变量的详细区别 + 实战练习,敬请关注~