跳到主要内容
Java 面向对象:this 关键字、构造方法与标准 JavaBean | 极客日志
Java java
Java 面向对象:this 关键字、构造方法与标准 JavaBean Java 面向对象进阶语法涵盖 this 关键字用法与内存原理、构造方法的定义重载及初始化作用、标准 JavaBean 类的企业规范编写。通过代码示例与内存图解析,区分成员变量与局部变量,掌握无参与带参构造方法的区别,学习使用 IDE 快捷键生成符合规范的实体类,帮助开发者建立统一的编码习惯并理解对象创建机制。
樱花落尽 发布于 2026/2/8 更新于 2026/6/3 26 浏览✨Java 面向对象精讲(二):this 关键字 + 构造方法 + 标准 JavaBean|吃透封装进阶语法
📖 知识回顾(课前必看,快速衔接)
在上一篇内容中,我们掌握了 Java 面向对象的基础:理解了面向对象的核心思想,学会了设计类、创建对象、使用对象,并掌握了封装的核心思想,通过 private 关键字私有化成员变量,提供 public 的 setXxx/getXxx 方法实现属性的安全赋值与取值,保证了数据的安全性。
但在上篇的封装代码中,我们发现了一个问题:setXxx 方法中出现了成员变量与局部变量同名的情况,此时该如何区分?创建对象时,能否在创建的同时直接给成员变量赋值,而非多次调用 set 方法?如何编写一套符合企业全规范的实体类?这就是本文要解决的核心问题,让我们的面向对象编码更规范、更高效。
一、this 关键字 🔍 区分变量&指向对象,封装必备
1.1 为什么需要 this 关键字?(解决实际问题)
在封装的 setXxx 方法中,我们会遇到成员变量(类中方法外)和局部变量(方法内/形参)同名的情况,而 Java 中默认遵循「局部变量优先」的原则,此时直接写变量名,程序会识别为局部变量,无法给成员变量赋值。
✅ 问题代码示例
public class GirlFriend {
private String name;
public void setName (String name) {
name = name;
}
}
此时调用 gf.setName("小浔浔"),成员变量 name 依然是默认值 null,这就是变量名冲突导致的问题,而 this 关键字就是解决这个问题的核心。
1.2 this 关键字的基础用法(必会语法)
当成员变量和局部变量同名时,在成员变量名前加上 this.,即可明确表示引用的是「类中的成员变量」,从而区分同名的局部变量。
✅ 解决问题后的代码
public class GirlFriend {
private String name;
public void setName (String name) {
this .name = name;
}
}
此时调用 gf.setName("小浔浔"),就能成功给成员变量 name 赋值,问题完美解决!
1.3 this 关键字的本质(必懂,理解内存更重要)
很多同学只记住了 this.的用法,却不懂其本质,这会影响后续的进阶学习,this 的本质是:当前方法调用者的对象内存地址值,是一个引用类型,指向当前对象本身。
简单来说:哪个对象调用了包含 this 的方法,this 就代表哪个对象,this 中存储的就是这个对象的堆内存地址。
1.4 this 关键字的内存图解析(直观理解,不再抽象) 以 Student 类的 setName 方法为例,结合内存分布,彻底讲清 this 的运行逻辑:
示例代码 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("付小玲" );
Student s2 = new Student ();
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 构造方法的标准格式(固定写法,直接套用) 构造方法是特殊的方法,有严格的格式要求,必须完全遵守,否则编译器会识别为普通方法:
public class 类名 {
修饰符 类名 (参数列表) {
方法体;
}
}
✔ 构造方法的三大核心特点(必背,笔试高频)
方法名与类名完全一致:包括大小写,比如类名 Student,构造方法名也必须是 Student;
无返回值类型:连 void 关键字都不能写,这是与普通方法最直观的区别;
无具体返回值:方法体中不能用 return 带回任何结果数据(可写空 return)。
2.3 构造方法的分类与使用(必会) 构造方法分为无参构造方法和带参构造方法,两者配合使用,满足不同的初始化需求。
✔ ① 无参构造方法(空参构造)
格式:无参数,方法体可空,也可手动写初始化逻辑;
作用:创建对象时,给成员变量赋默认值(或手动指定的固定值)。
public class Student {
private String name;
private int age;
public Student () {
}
}
✔ ② 带参构造方法(有参构造)
格式:包含参数列表,参数一般与成员变量对应;
作用:创建对象的同时,直接给成员变量赋指定值,无需后续调用 set 方法,简化代码。
public class Student {
private String name;
private int age;
public Student (String name, int age) {
this .name = name;
this .age = age;
}
}
✔ 构造方法的调用(自动调用,无需手动) 构造方法由 JVM 在创建对象时自动调用,无需程序员手动调用,创建一次对象,就调用一次构造方法:
Student s1 = new Student ();
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 构造方法完整代码示例(可直接运行,企业级规范) 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;
System.out.println("带参构造方法被调用,对象初始化完成!" );
}
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 ();
s1.setName("阿珍" );
s1.setAge(24 );
System.out.println(s1.getName() + " " + s1.getAge());
Student s2 = new Student ("阿强" , 23 );
System.out.println(s2.getName() + " " + s2.getAge());
s2.setAge(25 );
System.out.println(s2.getName() + " " + s2.getAge());
}
}
✅ 运行结果:构造方法自动调用,赋值/修改逻辑正常,完全符合开发需求。
三、标准 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(可直接复制使用)
public class User {
private String name;
private String pwd;
private String email;
private String gender;
private int age;
public User () {}
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;
}
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) public class UserTest {
public static void main (String[] args) {
User u1 = new User ();
u1.setName("张三" );
u1.setPwd("123456" );
u1.setEmail("[email protected] " );
u1.setGender("男" );
u1.setAge(20 );
System.out.println(u1.getName() + " " + u1.getEmail());
User u2 = new User ("李四" , "654321" , "[email protected] " , "女" , 22 );
System.out.println(u2.getName() + " " + u2.getAge());
}
}
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 类一键生成,无需手动编写。
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 和构造方法的使用场景,慢慢的你就会发现,这些规范会成为你的编码习惯,写代码时会自然而然的遵循。
希望本文能帮你吃透面向对象的进阶语法,掌握企业级的编码规范。愿你在规范的编码中,夯实基础,稳步进阶!💪
相关免费在线工具 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