🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA后端开发学习者
❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、游戏、规划、程序人生
✨ 从来绝巘须孤往,万里同尘即玉京
文章目录
- ✨Java面向对象精讲(二):this关键字+构造方法+标准JavaBean|吃透封装进阶语法
- 📌 文章摘要(246字)
- 🕒 阅读时长
- ✅ 适用人群 & 阅读重点
- 📖 知识回顾(课前必看,快速衔接)
- 一、this关键字 🔍 区分变量&指向对象,封装必备
- 1.1 为什么需要this关键字?(解决实际问题)
- ✅ 问题代码示例
- 1.2 this关键字的基础用法(必会语法)
- ✅ 解决问题后的代码
- 1.3 this关键字的本质(必懂,理解内存更重要)
- 1.4 this关键字的内存图解析(直观理解,不再抽象)
- 示例代码
- 核心内存运行逻辑
- 1.5 this关键字的使用注意事项(易错点,避坑指南)
- 1.6 this关键字核心总结(必背)
- 二、构造方法 🛠️ 对象初始化神器,开发必备
- 2.1 构造方法的概述(必背定义)
- ✅ 核心认知纠正(笔试高频坑)
- 2.2 构造方法的标准格式(固定写法,直接套用)
- ✔ 构造方法的三大核心特点(必背,笔试高频)
- 2.3 构造方法的分类与使用(必会)
- ✔ ① 无参构造方法(空参构造)
- ✔ ② 带参构造方法(有参构造)
- ✔ 构造方法的调用(自动调用,无需手动)
- 2.4 构造方法的注意事项(高频考点,必背无遗漏)
- 2.5 构造方法与setXxx方法的区别(易混点,清晰区分)
- ✅ 实际开发使用原则
- 2.6 构造方法完整代码示例(可直接运行,企业级规范)
- 三、标准JavaBean类 📋 企业开发统一规范,必须掌握
- 3.1 什么是标准JavaBean类?
- 3.2 标准JavaBean类的硬性要求(必背,严格遵守)
- 3.3 标准JavaBean类编写示例(手把手教,企业级实战)
- 需求:编写一个`User`类(用户类),包含属性:用户名(name)、密码(pwd)、邮箱(email)、性别(gender)、年龄(age),按标准JavaBean规范编写。
- ✅ 标准JavaBean类 - User.java(可直接复制使用)
- ✅ 测试类 - UserTest.java(使用标准JavaBean)
- 3.4 开发神器:快捷键生成标准JavaBean(效率翻倍,必会)
- ✔ 核心快捷键(IDEA)
- ✔ 分步生成步骤
- ✔ 进阶插件:PTG(1秒生成JavaBean)
- 3.5 标准JavaBean类核心总结(必背)
- ✨ 核心知识点总结(精华提炼,查漏补缺)
- ✅ this关键字核心
- ✅ 构造方法核心
- ✅ 标准JavaBean核心
- ✍️ 写在最后
- 预告:Java面向对象精讲(三)
✨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中默认遵循「局部变量优先」的原则,此时直接写变量名,程序会识别为局部变量,无法给成员变量赋值。
✅ 问题代码示例
publicclassGirlFriend{privateStringname;// 成员变量// setName方法:形参name是局部变量,与成员变量同名publicvoidsetName(Stringname){name=name;// 局部变量给局部变量赋值,成员变量未被赋值!}}此时调用gf.setName("小浔浔"),成员变量name依然是默认值null,这就是变量名冲突导致的问题,而this关键字就是解决这个问题的核心。
1.2 this关键字的基础用法(必会语法)
当成员变量和局部变量同名时,在成员变量名前加上this.,即可明确表示引用的是「类中的成员变量」,从而区分同名的局部变量。
✅ 解决问题后的代码
publicclassGirlFriend{privateStringname;// 成员变量publicvoidsetName(Stringname){this.name=name;// this.name → 成员变量;name → 局部变量(形参)}}此时调用gf.setName("小浔浔"),就能成功给成员变量name赋值,问题完美解决!
1.3 this关键字的本质(必懂,理解内存更重要)
很多同学只记住了this.的用法,却不懂其本质,这会影响后续的进阶学习,this的本质是:当前方法调用者的对象内存地址值,是一个引用类型,指向当前对象本身。
简单来说:哪个对象调用了包含this的方法,this就代表哪个对象,this中存储的就是这个对象的堆内存地址。
1.4 this关键字的内存图解析(直观理解,不再抽象)
以Student类的setName方法为例,结合内存分布,彻底讲清this的运行逻辑:
示例代码
publicclassStudent{privateStringname;publicvoidsetName(Stringname){this.name=name;// 核心行}}publicclassStudentTest{publicstaticvoidmain(String[]args){Students1=newStudent();s1.setName("付小玲");// s1调用setName方法Students2=newStudent();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 构造方法的标准格式(固定写法,直接套用)
构造方法是特殊的方法,有严格的格式要求,必须完全遵守,否则编译器会识别为普通方法:
publicclass类名{// 构造方法修饰符 类名(参数列表){方法体;// 一般为成员变量赋值,完成初始化}}✔ 构造方法的三大核心特点(必背,笔试高频)
- 方法名与类名完全一致:包括大小写,比如类名
Student,构造方法名也必须是Student; - 无返回值类型:连
void关键字都不能写,这是与普通方法最直观的区别; - 无具体返回值:方法体中不能用
return带回任何结果数据(可写空return)。
2.3 构造方法的分类与使用(必会)
构造方法分为无参构造方法和带参构造方法,两者配合使用,满足不同的初始化需求。
✔ ① 无参构造方法(空参构造)
- 格式:无参数,方法体可空,也可手动写初始化逻辑;
- 作用:创建对象时,给成员变量赋默认值(或手动指定的固定值)。
publicclassStudent{privateStringname;privateintage;// 无参构造方法publicStudent(){// 可空,也可手动初始化// this.name = "未知姓名";// this.age = 0;}}✔ ② 带参构造方法(有参构造)
- 格式:包含参数列表,参数一般与成员变量对应;
- 作用:创建对象的同时,直接给成员变量赋指定值,无需后续调用set方法,简化代码。
publicclassStudent{privateStringname;privateintage;// 带参构造方法(参数与成员变量对应)publicStudent(Stringname,intage){this.name=name;// 用this区分同名变量,给成员变量赋值this.age=age;}}✔ 构造方法的调用(自动调用,无需手动)
构造方法由JVM在创建对象时自动调用,无需程序员手动调用,创建一次对象,就调用一次构造方法:
// 调用无参构造,创建对象并默认初始化Students1=newStudent();// 调用带参构造,创建对象的同时赋值name="阿强",age=23Students2=newStudent("阿强",23);2.4 构造方法的注意事项(高频考点,必背无遗漏)
这是笔试面试的高频考点,也是初学者的易混点,必须逐条牢记,零失分 ✔️
- 默认无参构造:如果程序员没有手动定义任何构造方法,JVM会自动为类添加一个默认的无参构造方法,方法体为空;
- 默认构造失效:如果程序员手动定义了任意构造方法(无参/带参),JVM将不再提供默认的无参构造方法;
- 手动写无参构造:无论是否定义带参构造,推荐手动书写无参构造方法,避免后续创建对象时报错;
- 构造方法重载:多个构造方法方法名相同(与类名一致),参数列表不同(个数/类型/顺序),属于方法重载,这是核心用法;
- 调用次数:每
new一次对象,就会调用一次构造方法,创建N个对象则调用N次; - 修饰符:构造方法一般用
public修饰,保证外部类能创建对象(后续会讲其他修饰符); - 不能手动调用:构造方法只能由JVM在new对象时调用,不能通过
对象名.构造方法名()手动调用。
2.5 构造方法与setXxx方法的区别(易混点,清晰区分)
很多同学分不清构造方法和setXxx方法的使用场景,两者都能给成员变量赋值,核心区别在赋值时机和使用目的:
| 对比维度 | 构造方法 | setXxx方法 |
|---|---|---|
| 赋值时机 | 创建对象时赋值,仅能赋值一次 | 创建对象后赋值,可多次赋值 |
| 核心目的 | 完成对象的初始化 | 完成对象属性的修改/重新赋值 |
| 调用方式 | JVM自动调用,无需手动 | 程序员手动通过对象调用 |
| 参数 | 可无参/带参 | 必须带参(要赋值的内容) |
| 返回值 | 无返回值类型 | 无返回值(void) |
✅ 实际开发使用原则
- 创建对象时,确定属性的初始值→ 使用带参构造;
- 创建对象后,需要修改属性值→ 使用setXxx方法;
- 创建对象时,属性值暂时不确定→ 使用无参构造,后续用setXxx方法赋值。
2.6 构造方法完整代码示例(可直接运行,企业级规范)
publicclassStudent{// 私有化成员变量privateStringname;privateintage;// 1. 手动编写无参构造方法(推荐)publicStudent(){System.out.println("无参构造方法被调用,对象创建中...");}// 2. 带参构造方法(重载),初始化所有成员变量publicStudent(Stringname,intage){this.name=name;// this区分同名变量this.age=age;System.out.println("带参构造方法被调用,对象初始化完成!");}// 3. get/set方法publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}// 测试类publicclassStudentTest{publicstaticvoidmain(String[]args){// 调用无参构造创建对象Students1=newStudent();// 创建对象后用set方法赋值s1.setName("阿珍");s1.setAge(24);System.out.println(s1.getName()+" "+s1.getAge());// 阿珍 24// 调用带参构造创建对象,同时赋值Students2=newStudent("阿强",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(可直接复制使用)
/** * 用户类 - 标准JavaBean * 包含:用户名、密码、邮箱、性别、年龄 */publicclassUser{// 1. 私有化所有成员变量privateStringname;privateStringpwd;privateStringemail;privateStringgender;privateintage;// 2. 无参构造方法publicUser(){}// 3. 带全部成员变量的带参构造方法publicUser(Stringname,Stringpwd,Stringemail,Stringgender,intage){this.name=name;this.pwd=pwd;this.email=email;this.gender=gender;this.age=age;}// 4. 为每个成员变量提供对应的setXxx/getXxx方法publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPwd(){returnpwd;}publicvoidsetPwd(Stringpwd){this.pwd=pwd;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetGender(){returngender;}publicvoidsetGender(Stringgender){this.gender=gender;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}✅ 测试类 - UserTest.java(使用标准JavaBean)
publicclassUserTest{publicstaticvoidmain(String[]args){// 方式1:无参构造 + set方法Useru1=newUser();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:带参构造直接初始化Useru2=newUser("李四","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面向对象精讲(三)
对象内存图全解析(单对象/多对象/多引用指向同一对象) + 成员变量与局部变量的详细区别 + 实战练习,敬请关注~