当前位置: 代码网 > it编程>编程语言>Java > Java面向对象全解析之this关键字+构造方法+标准JavaBean

Java面向对象全解析之this关键字+构造方法+标准JavaBean

2026年01月19日 Java 我要评论
java面向对象精讲(二):this关键字+构造方法+标准javabean|吃透封装进阶语法文章摘要本文是java面向对象系列第二篇核心进阶,承接上篇类与对象、封装知识,全覆盖this关键字、构造方法

java面向对象精讲(二):this关键字+构造方法+标准javabean|吃透封装进阶语法

 文章摘要

本文是java面向对象系列第二篇核心进阶,承接上篇类与对象、封装知识,全覆盖this关键字、构造方法、标准javabean类三大核心考点,也是企业开发与笔试面试的高频内容。从内存原理角度拆解this关键字的本质与用法,彻底讲清构造方法的初始化作用、重载规则及使用细节,手把手教你编写符合企业规范的标准javabean类,搭配完整可运行代码、内存图解析、开发快捷键技巧与易错点避坑。内容由浅入深、图文结合,零基础能看懂,进阶者能夯实。学完本文可独立完成高规范的javabean类开发,打通“封装-初始化-标准化编码”的逻辑闭环,是吃透java面向对象的关键内容。

✅ 适用人群 & 阅读重点

▫️ java零基础入门者:重点看this关键字的基础用法、构造方法的定义格式、标准javabean的固定写法,能照猫画虎编写规范代码。
▫️ 在校学生/备考笔试者:重点吃透this关键字的本质、构造方法的特点与注意事项、javabean的规范要求,这些是笔试填空/简答高频考点。
▫️ 开发入门夯实基础者:重点看构造方法的重载、javabean开发快捷键、this在构造方法中的使用,贴合企业实际开发规范。
▫️ 初学面向对象迷茫者:重点看内存图解析、代码示例的逐行讲解,理解抽象语法背后的实际运行逻辑。
▫️ 复习巩固者:直接看「知识回顾+核心总结」,快速梳理知识点,强化记忆易混点。

知识回顾(课前必看,快速衔接)

在上一篇内容中,我们掌握了java面向对象的基础:理解了面向对象的核心思想,学会了设计类、创建对象、使用对象,并掌握了封装的核心思想,通过private关键字私有化成员变量,提供publicsetxxx/getxxx方法实现属性的安全赋值与取值,保证了数据的安全性。

但在上篇的封装代码中,我们发现了一个问题:setxxx方法中出现了成员变量与局部变量同名的情况,此时该如何区分?创建对象时,能否在创建的同时直接给成员变量赋值,而非多次调用set方法?如何编写一套符合企业全规范的实体类?这就是本文要解决的核心问题,让我们的面向对象编码更规范、更高效。

一、this关键字区分变量&指向对象,封装必备

1.1 为什么需要this关键字?(解决实际问题)

在封装的setxxx方法中,我们会遇到成员变量(类中方法外)和局部变量(方法内/形参)同名的情况,而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.,即可明确表示引用的是「类中的成员变量」,从而区分同名的局部变量。

✅ 解决问题后的代码
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的运行逻辑:

示例代码
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方法
    }
}
核心内存运行逻辑
  1. 执行new student()时,jvm在堆内存开辟空间,创建对象,分配唯一地址(如s1→0x00000012,s2→0x00000024);
  2. 调用s1.setname("付小玲")时,jvm在栈内存创建setname方法的栈帧,自动将s1的地址0x00000012赋值给this
  3. 执行this.name = name时,通过this的地址找到堆中s1的对象,将形参的"付小玲"赋值给该对象的成员变量name
  4. 调用s2.setname("桥小久")时,同理,this被赋值为s2的地址0x00000024,操作的是堆中s2的对象,与s1互不影响。

✅ 核心结论:this是方法的隐藏参数,jvm会在调用对象方法时自动传递,无需程序员手动定义,其值就是调用者对象的地址。

1.5 this关键字的使用注意事项(易错点,避坑指南)

  1. this关键字只能在类的成员方法中使用,不能在静态方法(static修饰)中使用(静态方法无对象调用,后续会讲);
  2. this可以直接访问类的成员变量成员方法,格式:this.成员变量this.成员方法()
  3. this关键字可以作为方法的返回值,返回当前对象(进阶用法,后续讲解);
  4. this在方法中可以省略,当成员变量和局部变量不同名时,this.可直接不写,程序会默认引用成员变量。

1.6 this关键字核心总结(必背)

  1. 基础作用:区分同名的成员变量和局部变量this.指向成员变量;
  2. 本质:当前方法调用者的对象地址,哪个对象调用方法,this就指向哪个对象;
  3. 自动传递:jvm自动为成员方法分配this参数,无需手动定义;
  4. 核心格式:this.成员变量名this.成员方法名()

二、构造方法对象初始化神器,开发必备

2.1 构造方法的概述(必背定义)

构造方法也叫构造器、构造函数,是java类中一种特殊的方法,其唯一作用是:在创建对象时,由jvm自动调用,为对象的成员变量完成初始化(赋值),是对象创建过程中的关键步骤。

✅ 核心认知纠正(笔试高频坑)

❌ 错误说法:构造方法是用来创建对象的。
✅ 正确说法:new关键字才是真正创建对象的核心,构造方法只是new创建对象时的其中一步,仅负责成员变量初始化,对象的创建还包括加载类、开辟堆空间、默认初始化等步骤。

2.2 构造方法的标准格式(固定写法,直接套用)

构造方法是特殊的方法,有严格的格式要求,必须完全遵守,否则编译器会识别为普通方法:

public class 类名 {
    // 构造方法
    修饰符 类名(参数列表) {
        方法体; // 一般为成员变量赋值,完成初始化
    }
}
构造方法的三大核心特点(必背,笔试高频)
  1. 方法名与类名完全一致:包括大小写,比如类名student,构造方法名也必须是student
  2. 无返回值类型:连void关键字都不能写,这是与普通方法最直观的区别;
  3. 无具体返回值:方法体中不能用return带回任何结果数据(可写空return)。

2.3 构造方法的分类与使用(必会)

构造方法分为无参构造方法带参构造方法,两者配合使用,满足不同的初始化需求。

① 无参构造方法(空参构造)
  • 格式:无参数,方法体可空,也可手动写初始化逻辑;
  • 作用:创建对象时,给成员变量赋默认值(或手动指定的固定值)。
public class student {
    private string name;
    private int age;
    // 无参构造方法
    public student() {
        // 可空,也可手动初始化
        // this.name = "未知姓名";
        // this.age = 0;
    }
}
✔ ② 带参构造方法(有参构造)
  • 格式:包含参数列表,参数一般与成员变量对应;
  • 作用:创建对象的同时,直接给成员变量赋指定值,无需后续调用set方法,简化代码。
public class student {
    private string name;
    private int age;
    // 带参构造方法(参数与成员变量对应)
    public student(string name, int age) {
        this.name = name; // 用this区分同名变量,给成员变量赋值
        this.age = age;
    }
}
✔ 构造方法的调用(自动调用,无需手动)

构造方法由jvm在创建对象时自动调用,无需程序员手动调用,创建一次对象,就调用一次构造方法:

// 调用无参构造,创建对象并默认初始化
student s1 = new student();
// 调用带参构造,创建对象的同时赋值name="阿强",age=23
student s2 = new student("阿强", 23);

2.4 构造方法的注意事项(高频考点,必背无遗漏)

这是笔试面试的高频考点,也是初学者的易混点,必须逐条牢记,零失分 ✔️

  1. 默认无参构造:如果程序员没有手动定义任何构造方法,jvm会自动为类添加一个默认的无参构造方法,方法体为空;
  2. 默认构造失效:如果程序员手动定义了任意构造方法(无参/带参),jvm将不再提供默认的无参构造方法
  3. 手动写无参构造:无论是否定义带参构造,推荐手动书写无参构造方法,避免后续创建对象时报错;
  4. 构造方法重载:多个构造方法方法名相同(与类名一致),参数列表不同(个数/类型/顺序),属于方法重载,这是核心用法;
  5. 调用次数:每new一次对象,就会调用一次构造方法,创建n个对象则调用n次;
  6. 修饰符:构造方法一般用public修饰,保证外部类能创建对象(后续会讲其他修饰符);
  7. 不能手动调用:构造方法只能由jvm在new对象时调用,不能通过对象名.构造方法名()手动调用。

2.5 构造方法与setxxx方法的区别(易混点,清晰区分)

很多同学分不清构造方法和setxxx方法的使用场景,两者都能给成员变量赋值,核心区别在赋值时机使用目的

对比维度构造方法setxxx方法
赋值时机创建对象赋值,仅能赋值一次创建对象赋值,可多次赋值
核心目的完成对象的初始化完成对象属性的修改/重新赋值
调用方式jvm自动调用,无需手动程序员手动通过对象调用
参数可无参/带参必须带参(要赋值的内容)
返回值无返回值类型无返回值(void)
 实际开发使用原则
  • 创建对象时,确定属性的初始值 → 使用带参构造
  • 创建对象后,需要修改属性值 → 使用setxxx方法
  • 创建对象时,属性值暂时不确定 → 使用无参构造,后续用setxxx方法赋值。

2.6 构造方法完整代码示例(可直接运行,企业级规范)

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开发的行业统一规范,无论是笔试还是企业开发,都必须严格遵守,缺一不可

  1. 类名规范:见名知意,采用大驼峰命名法,首字母大写,如userstudentgoods
  2. 成员变量规范:所有成员变量必须用private关键字私有化,隐藏内部数据;
  3. 构造方法规范:必须提供两个构造方法,缺一不可:
    • 无参构造方法(空参构造);
    • 全部成员变量的带参构造方法;
  4. 成员方法规范
    • 为每个私有化的成员变量,提供对应的public修饰的setxxx/getxxx方法
    • 如果类有其他业务行为,添加对应的public成员方法;
  5. 其他规范:成员变量和方法的命名遵循小驼峰命名法,见名知意。

3.3 标准javabean类编写示例(手把手教,企业级实战)

需求:编写一个user类(用户类),包含属性:用户名(name)、密码(pwd)、邮箱(email)、性别(gender)、年龄(age),按标准javabean规范编写。
标准javabean类 - user.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)
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
分步生成步骤
  1. 先编写好类的私有化成员变量
  2. 按下快捷键,选择constructor(构造方法),生成无参构造和带全部参数的构造方法;
    • 生成无参构造:直接选中无参选项回车;
    • 生成带全部参数构造:按ctrl + a全选成员变量,回车;
  3. 再次按下快捷键,选择getter and setter,按ctrl + a全选成员变量,回车,一键生成所有setxxx/getxxx方法;
  4. 完成!标准javabean类一键生成,无需手动编写。
 进阶插件:ptg(1秒生成javabean)

如果觉得快捷键还不够快,可以安装idea插件ptg,支持根据属性名一键生成完整的标准javabean类,快捷键:ctrl + shift + 豆子,开发效率拉满!

3.5 标准javabean类核心总结(必背)

  1. 标准javabean是企业开发的统一规范,用于封装数据,是项目基础;
  2. 核心要求:私有化成员变量 + 无参构造 + 带全参构造 + 全套setxxx/getxxx;
  3. 开发技巧:使用idea快捷键alt + insert一键生成,避免手动编写繁琐代码;
  4. 核心作用:封装数据、保证数据安全、提高代码可维护性,适配企业团队开发。

✨ 核心知识点总结(精华提炼,查漏补缺)

this关键字核心

  1. 基础用法:区分同名的成员变量和局部变量,this.指向成员变量;
  2. 本质:当前方法调用者的对象地址,哪个对象调用,this就指向哪个对象;
  3. 自动传递:jvm为成员方法自动分配,无需手动定义。

构造方法核心

  1. 特殊方法,方法名与类名一致,无返回值类型,由jvm自动调用;
  2. 核心作用:创建对象时为成员变量完成初始化;
  3. 分类:无参构造、带参构造,支持重载;
  4. 关键注意:手动定义构造方法后,默认无参构造失效,推荐手动编写无参构造;
  5. 与setxxx区别:构造方法创建对象时赋值(一次),setxxx创建对象后赋值(多次)。

标准javabean核心

  1. 企业级统一规范:私有化成员变量 + 无参构造 + 全参构造 + 全套setxxx/getxxx;
  2. 开发技巧:idea快捷键alt + insert一键生成构造方法和set/get;
  3. 核心作用:封装数据,适配团队开发,保证代码规范统一。

写在最后

本文是java面向对象的核心进阶内容,也是企业开发的基础规范内容。this关键字、构造方法、标准javabean类,这三个知识点看似独立,实则紧密关联:this解决了变量名冲突问题,构造方法实现了对象的高效初始化,标准javabean则将封装、this、构造方法整合,形成了企业开发的统一编码规范。

很多同学初学这些知识点时,会觉得“规则太多、记不住”,这是正常的。java是一门强规范的语言,面向对象的规范更是如此,这些规则不是凭空制定的,而是为了解决实际开发中的问题、适配团队协作而总结的最佳实践。

学习的关键不是死记硬背规则,而是理解规则背后的原因,多动手练习:多写几个标准javabean类,用快捷键生成代码,体会this和构造方法的使用场景,慢慢的你就会发现,这些规范会成为你的编码习惯,写代码时会自然而然的遵循。

到此这篇关于java面向对象:this关键字+构造方法+标准javabean的文章就介绍到这了,更多相关java this关键字 构造方法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com