Java面向?qū)ο笕馕鲋畉his關(guān)鍵字+構(gòu)造方法+標(biāo)準(zhǔn)JavaBean
Java面向?qū)ο缶v(二):this關(guān)鍵字+構(gòu)造方法+標(biāo)準(zhǔn)JavaBean|吃透封裝進(jìn)階語法
文章摘要
本文是Java面向?qū)ο笙盗械诙诵倪M(jìn)階,承接上篇類與對(duì)象、封裝知識(shí),全覆蓋this關(guān)鍵字、構(gòu)造方法、標(biāo)準(zhǔn)JavaBean類三大核心考點(diǎn),也是企業(yè)開發(fā)與筆試面試的高頻內(nèi)容。從內(nèi)存原理角度拆解this關(guān)鍵字的本質(zhì)與用法,徹底講清構(gòu)造方法的初始化作用、重載規(guī)則及使用細(xì)節(jié),手把手教你編寫符合企業(yè)規(guī)范的標(biāo)準(zhǔn)JavaBean類,搭配完整可運(yùn)行代碼、內(nèi)存圖解析、開發(fā)快捷鍵技巧與易錯(cuò)點(diǎn)避坑。內(nèi)容由淺入深、圖文結(jié)合,零基礎(chǔ)能看懂,進(jìn)階者能夯實(shí)。學(xué)完本文可獨(dú)立完成高規(guī)范的JavaBean類開發(fā),打通“封裝-初始化-標(biāo)準(zhǔn)化編碼”的邏輯閉環(huán),是吃透Java面向?qū)ο蟮年P(guān)鍵內(nèi)容。
? 適用人群 & 閱讀重點(diǎn)
?? Java零基礎(chǔ)入門者:重點(diǎn)看this關(guān)鍵字的基礎(chǔ)用法、構(gòu)造方法的定義格式、標(biāo)準(zhǔn)JavaBean的固定寫法,能照貓畫虎編寫規(guī)范代碼。
?? 在校學(xué)生/備考筆試者:重點(diǎn)吃透this關(guān)鍵字的本質(zhì)、構(gòu)造方法的特點(diǎn)與注意事項(xiàng)、JavaBean的規(guī)范要求,這些是筆試填空/簡答高頻考點(diǎn)。
?? 開發(fā)入門夯實(shí)基礎(chǔ)者:重點(diǎn)看構(gòu)造方法的重載、JavaBean開發(fā)快捷鍵、this在構(gòu)造方法中的使用,貼合企業(yè)實(shí)際開發(fā)規(guī)范。
?? 初學(xué)面向?qū)ο竺悦U?/strong>:重點(diǎn)看內(nèi)存圖解析、代碼示例的逐行講解,理解抽象語法背后的實(shí)際運(yùn)行邏輯。
?? 復(fù)習(xí)鞏固者:直接看「知識(shí)回顧+核心總結(jié)」,快速梳理知識(shí)點(diǎn),強(qiáng)化記憶易混點(diǎn)。
知識(shí)回顧(課前必看,快速銜接)
在上一篇內(nèi)容中,我們掌握了Java面向?qū)ο蟮幕A(chǔ):理解了面向?qū)ο蟮暮诵乃枷耄瑢W(xué)會(huì)了設(shè)計(jì)類、創(chuàng)建對(duì)象、使用對(duì)象,并掌握了封裝的核心思想,通過private關(guān)鍵字私有化成員變量,提供public的setXxx/getXxx方法實(shí)現(xiàn)屬性的安全賦值與取值,保證了數(shù)據(jù)的安全性。
但在上篇的封裝代碼中,我們發(fā)現(xiàn)了一個(gè)問題:setXxx方法中出現(xiàn)了成員變量與局部變量同名的情況,此時(shí)該如何區(qū)分?創(chuàng)建對(duì)象時(shí),能否在創(chuàng)建的同時(shí)直接給成員變量賦值,而非多次調(diào)用set方法?如何編寫一套符合企業(yè)全規(guī)范的實(shí)體類?這就是本文要解決的核心問題,讓我們的面向?qū)ο缶幋a更規(guī)范、更高效。
一、this關(guān)鍵字區(qū)分變量&指向?qū)ο?,封裝必備
1.1 為什么需要this關(guān)鍵字?(解決實(shí)際問題)
在封裝的setXxx方法中,我們會(huì)遇到成員變量(類中方法外)和局部變量(方法內(nèi)/形參)同名的情況,而Java中默認(rèn)遵循「局部變量優(yōu)先」的原則,此時(shí)直接寫變量名,程序會(huì)識(shí)別為局部變量,無法給成員變量賦值。
? 問題代碼示例
public class GirlFriend {
private String name; // 成員變量
// setName方法:形參name是局部變量,與成員變量同名
public void setName(String name) {
name = name; // 局部變量給局部變量賦值,成員變量未被賦值!
}
}
此時(shí)調(diào)用gf.setName("小潯潯"),成員變量name依然是默認(rèn)值null,這就是變量名沖突導(dǎo)致的問題,而this關(guān)鍵字就是解決這個(gè)問題的核心。
1.2 this關(guān)鍵字的基礎(chǔ)用法(必會(huì)語法)
當(dāng)成員變量和局部變量同名時(shí),在成員變量名前加上this.,即可明確表示引用的是「類中的成員變量」,從而區(qū)分同名的局部變量。
? 解決問題后的代碼
public class GirlFriend {
private String name; // 成員變量
public void setName(String name) {
this.name = name; // this.name → 成員變量;name → 局部變量(形參)
}
}
此時(shí)調(diào)用gf.setName("小潯潯"),就能成功給成員變量name賦值,問題完美解決!
1.3 this關(guān)鍵字的本質(zhì)(必懂,理解內(nèi)存更重要)
很多同學(xué)只記住了this.的用法,卻不懂其本質(zhì),這會(huì)影響后續(xù)的進(jìn)階學(xué)習(xí),this的本質(zhì)是:當(dāng)前方法調(diào)用者的對(duì)象內(nèi)存地址值,是一個(gè)引用類型,指向當(dāng)前對(duì)象本身。
簡單來說:哪個(gè)對(duì)象調(diào)用了包含this的方法,this就代表哪個(gè)對(duì)象,this中存儲(chǔ)的就是這個(gè)對(duì)象的堆內(nèi)存地址。
1.4 this關(guān)鍵字的內(nèi)存圖解析(直觀理解,不再抽象)
以Student類的setName方法為例,結(jié)合內(nèi)存分布,徹底講清this的運(yùn)行邏輯:
示例代碼
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調(diào)用setName方法
Student s2 = new Student();
s2.setName("橋小久"); // s2調(diào)用setName方法
}
}核心內(nèi)存運(yùn)行邏輯
- 執(zhí)行
new Student()時(shí),JVM在堆內(nèi)存開辟空間,創(chuàng)建對(duì)象,分配唯一地址(如s1→0x00000012,s2→0x00000024); - 調(diào)用
s1.setName("付小玲")時(shí),JVM在棧內(nèi)存創(chuàng)建setName方法的棧幀,自動(dòng)將s1的地址0x00000012賦值給this; - 執(zhí)行
this.name = name時(shí),通過this的地址找到堆中s1的對(duì)象,將形參的"付小玲"賦值給該對(duì)象的成員變量name; - 調(diào)用
s2.setName("橋小久")時(shí),同理,this被賦值為s2的地址0x00000024,操作的是堆中s2的對(duì)象,與s1互不影響。
? 核心結(jié)論:this是方法的隱藏參數(shù),JVM會(huì)在調(diào)用對(duì)象方法時(shí)自動(dòng)傳遞,無需程序員手動(dòng)定義,其值就是調(diào)用者對(duì)象的地址。
1.5 this關(guān)鍵字的使用注意事項(xiàng)(易錯(cuò)點(diǎn),避坑指南)
- this關(guān)鍵字只能在類的成員方法中使用,不能在靜態(tài)方法(static修飾)中使用(靜態(tài)方法無對(duì)象調(diào)用,后續(xù)會(huì)講);
- this可以直接訪問類的成員變量和成員方法,格式:
this.成員變量、this.成員方法(); - this關(guān)鍵字可以作為方法的返回值,返回當(dāng)前對(duì)象(進(jìn)階用法,后續(xù)講解);
- this在方法中可以省略,當(dāng)成員變量和局部變量不同名時(shí),
this.可直接不寫,程序會(huì)默認(rèn)引用成員變量。
1.6 this關(guān)鍵字核心總結(jié)(必背)
- 基礎(chǔ)作用:區(qū)分同名的成員變量和局部變量,
this.指向成員變量; - 本質(zhì):當(dāng)前方法調(diào)用者的對(duì)象地址,哪個(gè)對(duì)象調(diào)用方法,this就指向哪個(gè)對(duì)象;
- 自動(dòng)傳遞:JVM自動(dòng)為成員方法分配this參數(shù),無需手動(dòng)定義;
- 核心格式:
this.成員變量名、this.成員方法名()。
二、構(gòu)造方法對(duì)象初始化神器,開發(fā)必備
2.1 構(gòu)造方法的概述(必背定義)
構(gòu)造方法也叫構(gòu)造器、構(gòu)造函數(shù),是Java類中一種特殊的方法,其唯一作用是:在創(chuàng)建對(duì)象時(shí),由JVM自動(dòng)調(diào)用,為對(duì)象的成員變量完成初始化(賦值),是對(duì)象創(chuàng)建過程中的關(guān)鍵步驟。
? 核心認(rèn)知糾正(筆試高頻坑)
? 錯(cuò)誤說法:構(gòu)造方法是用來創(chuàng)建對(duì)象的。
? 正確說法:new關(guān)鍵字才是真正創(chuàng)建對(duì)象的核心,構(gòu)造方法只是new創(chuàng)建對(duì)象時(shí)的其中一步,僅負(fù)責(zé)成員變量初始化,對(duì)象的創(chuàng)建還包括加載類、開辟堆空間、默認(rèn)初始化等步驟。
2.2 構(gòu)造方法的標(biāo)準(zhǔn)格式(固定寫法,直接套用)
構(gòu)造方法是特殊的方法,有嚴(yán)格的格式要求,必須完全遵守,否則編譯器會(huì)識(shí)別為普通方法:
public class 類名 {
// 構(gòu)造方法
修飾符 類名(參數(shù)列表) {
方法體; // 一般為成員變量賦值,完成初始化
}
}
構(gòu)造方法的三大核心特點(diǎn)(必背,筆試高頻)
- 方法名與類名完全一致:包括大小寫,比如類名
Student,構(gòu)造方法名也必須是Student; - 無返回值類型:連
void關(guān)鍵字都不能寫,這是與普通方法最直觀的區(qū)別; - 無具體返回值:方法體中不能用
return帶回任何結(jié)果數(shù)據(jù)(可寫空return)。
2.3 構(gòu)造方法的分類與使用(必會(huì))
構(gòu)造方法分為無參構(gòu)造方法和帶參構(gòu)造方法,兩者配合使用,滿足不同的初始化需求。
① 無參構(gòu)造方法(空參構(gòu)造)
- 格式:無參數(shù),方法體可空,也可手動(dòng)寫初始化邏輯;
- 作用:創(chuàng)建對(duì)象時(shí),給成員變量賦默認(rèn)值(或手動(dòng)指定的固定值)。
public class Student {
private String name;
private int age;
// 無參構(gòu)造方法
public Student() {
// 可空,也可手動(dòng)初始化
// this.name = "未知姓名";
// this.age = 0;
}
}? ② 帶參構(gòu)造方法(有參構(gòu)造)
- 格式:包含參數(shù)列表,參數(shù)一般與成員變量對(duì)應(yīng);
- 作用:創(chuàng)建對(duì)象的同時(shí),直接給成員變量賦指定值,無需后續(xù)調(diào)用set方法,簡化代碼。
public class Student {
private String name;
private int age;
// 帶參構(gòu)造方法(參數(shù)與成員變量對(duì)應(yīng))
public Student(String name, int age) {
this.name = name; // 用this區(qū)分同名變量,給成員變量賦值
this.age = age;
}
}? 構(gòu)造方法的調(diào)用(自動(dòng)調(diào)用,無需手動(dòng))
構(gòu)造方法由JVM在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用,無需程序員手動(dòng)調(diào)用,創(chuàng)建一次對(duì)象,就調(diào)用一次構(gòu)造方法:
// 調(diào)用無參構(gòu)造,創(chuàng)建對(duì)象并默認(rèn)初始化
Student s1 = new Student();
// 調(diào)用帶參構(gòu)造,創(chuàng)建對(duì)象的同時(shí)賦值name="阿強(qiáng)",age=23
Student s2 = new Student("阿強(qiáng)", 23);
2.4 構(gòu)造方法的注意事項(xiàng)(高頻考點(diǎn),必背無遺漏)
這是筆試面試的高頻考點(diǎn),也是初學(xué)者的易混點(diǎn),必須逐條牢記,零失分 ??
- 默認(rèn)無參構(gòu)造:如果程序員沒有手動(dòng)定義任何構(gòu)造方法,JVM會(huì)自動(dòng)為類添加一個(gè)默認(rèn)的無參構(gòu)造方法,方法體為空;
- 默認(rèn)構(gòu)造失效:如果程序員手動(dòng)定義了任意構(gòu)造方法(無參/帶參),JVM將不再提供默認(rèn)的無參構(gòu)造方法;
- 手動(dòng)寫無參構(gòu)造:無論是否定義帶參構(gòu)造,推薦手動(dòng)書寫無參構(gòu)造方法,避免后續(xù)創(chuàng)建對(duì)象時(shí)報(bào)錯(cuò);
- 構(gòu)造方法重載:多個(gè)構(gòu)造方法方法名相同(與類名一致),參數(shù)列表不同(個(gè)數(shù)/類型/順序),屬于方法重載,這是核心用法;
- 調(diào)用次數(shù):每
new一次對(duì)象,就會(huì)調(diào)用一次構(gòu)造方法,創(chuàng)建N個(gè)對(duì)象則調(diào)用N次; - 修飾符:構(gòu)造方法一般用
public修飾,保證外部類能創(chuàng)建對(duì)象(后續(xù)會(huì)講其他修飾符); - 不能手動(dòng)調(diào)用:構(gòu)造方法只能由JVM在new對(duì)象時(shí)調(diào)用,不能通過
對(duì)象名.構(gòu)造方法名()手動(dòng)調(diào)用。
2.5 構(gòu)造方法與setXxx方法的區(qū)別(易混點(diǎn),清晰區(qū)分)
很多同學(xué)分不清構(gòu)造方法和setXxx方法的使用場景,兩者都能給成員變量賦值,核心區(qū)別在賦值時(shí)機(jī)和使用目的:
| 對(duì)比維度 | 構(gòu)造方法 | setXxx方法 |
|---|---|---|
| 賦值時(shí)機(jī) | 創(chuàng)建對(duì)象時(shí)賦值,僅能賦值一次 | 創(chuàng)建對(duì)象后賦值,可多次賦值 |
| 核心目的 | 完成對(duì)象的初始化 | 完成對(duì)象屬性的修改/重新賦值 |
| 調(diào)用方式 | JVM自動(dòng)調(diào)用,無需手動(dòng) | 程序員手動(dòng)通過對(duì)象調(diào)用 |
| 參數(shù) | 可無參/帶參 | 必須帶參(要賦值的內(nèi)容) |
| 返回值 | 無返回值類型 | 無返回值(void) |
實(shí)際開發(fā)使用原則
- 創(chuàng)建對(duì)象時(shí),確定屬性的初始值 → 使用帶參構(gòu)造;
- 創(chuàng)建對(duì)象后,需要修改屬性值 → 使用setXxx方法;
- 創(chuàng)建對(duì)象時(shí),屬性值暫時(shí)不確定 → 使用無參構(gòu)造,后續(xù)用setXxx方法賦值。
2.6 構(gòu)造方法完整代碼示例(可直接運(yùn)行,企業(yè)級(jí)規(guī)范)
public class Student {
// 私有化成員變量
private String name;
private int age;
// 1. 手動(dòng)編寫無參構(gòu)造方法(推薦)
public Student() {
System.out.println("無參構(gòu)造方法被調(diào)用,對(duì)象創(chuàng)建中...");
}
// 2. 帶參構(gòu)造方法(重載),初始化所有成員變量
public Student(String name, int age) {
this.name = name; // this區(qū)分同名變量
this.age = age;
System.out.println("帶參構(gòu)造方法被調(diào)用,對(duì)象初始化完成!");
}
// 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) {
// 調(diào)用無參構(gòu)造創(chuàng)建對(duì)象
Student s1 = new Student();
// 創(chuàng)建對(duì)象后用set方法賦值
s1.setName("阿珍");
s1.setAge(24);
System.out.println(s1.getName() + " " + s1.getAge()); // 阿珍 24
// 調(diào)用帶參構(gòu)造創(chuàng)建對(duì)象,同時(shí)賦值
Student s2 = new Student("阿強(qiáng)", 23);
System.out.println(s2.getName() + " " + s2.getAge()); // 阿強(qiáng) 23
// 創(chuàng)建對(duì)象后用set方法修改值
s2.setAge(25);
System.out.println(s2.getName() + " " + s2.getAge()); // 阿強(qiáng) 25
}
}? 運(yùn)行結(jié)果:構(gòu)造方法自動(dòng)調(diào)用,賦值/修改邏輯正常,完全符合開發(fā)需求。
三、標(biāo)準(zhǔn)JavaBean類企業(yè)開發(fā)統(tǒng)一規(guī)范,必須掌握
3.1 什么是標(biāo)準(zhǔn)JavaBean類?
JavaBean類是我們上篇講的「描述一類事物的類」的企業(yè)級(jí)標(biāo)準(zhǔn)化版本,是Java項(xiàng)目中最基礎(chǔ)、最常用的實(shí)體類(Entity類),用于封裝數(shù)據(jù),所有的數(shù)據(jù)庫表、接口返回?cái)?shù)據(jù)、業(yè)務(wù)實(shí)體,都對(duì)應(yīng)標(biāo)準(zhǔn)的JavaBean類。
標(biāo)準(zhǔn)JavaBean類是遵循Java官方制定的一套固定規(guī)范的類,所有程序員都按此規(guī)范編寫,保證代碼的統(tǒng)一性、可讀性和可維護(hù)性。
3.2 標(biāo)準(zhǔn)JavaBean類的硬性要求(必背,嚴(yán)格遵守)
這是Java開發(fā)的行業(yè)統(tǒng)一規(guī)范,無論是筆試還是企業(yè)開發(fā),都必須嚴(yán)格遵守,缺一不可
- 類名規(guī)范:見名知意,采用大駝峰命名法,首字母大寫,如
User、Student、Goods; - 成員變量規(guī)范:所有成員變量必須用private關(guān)鍵字私有化,隱藏內(nèi)部數(shù)據(jù);
- 構(gòu)造方法規(guī)范:必須提供兩個(gè)構(gòu)造方法,缺一不可:
- 無參構(gòu)造方法(空參構(gòu)造);
- 帶全部成員變量的帶參構(gòu)造方法;
- 成員方法規(guī)范:
- 為每個(gè)私有化的成員變量,提供對(duì)應(yīng)的public修飾的setXxx/getXxx方法;
- 如果類有其他業(yè)務(wù)行為,添加對(duì)應(yīng)的public成員方法;
- 其他規(guī)范:成員變量和方法的命名遵循小駝峰命名法,見名知意。
3.3 標(biāo)準(zhǔn)JavaBean類編寫示例(手把手教,企業(yè)級(jí)實(shí)戰(zhàn))
需求:編寫一個(gè)User類(用戶類),包含屬性:用戶名(name)、密碼(pwd)、郵箱(email)、性別(gender)、年齡(age),按標(biāo)準(zhǔn)JavaBean規(guī)范編寫。
標(biāo)準(zhǔn)JavaBean類 - User.java(可直接復(fù)制使用)
/**
* 用戶類 - 標(biāo)準(zhǔn)JavaBean
* 包含:用戶名、密碼、郵箱、性別、年齡
*/
public class User {
// 1. 私有化所有成員變量
private String name;
private String pwd;
private String email;
private String gender;
private int age;
// 2. 無參構(gòu)造方法
public User() {
}
// 3. 帶全部成員變量的帶參構(gòu)造方法
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. 為每個(gè)成員變量提供對(duì)應(yīng)的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(使用標(biāo)準(zhǔn)JavaBean)
public class UserTest {
public static void main(String[] args) {
// 方式1:無參構(gòu)造 + 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:帶參構(gòu)造直接初始化
User u2 = new User("李四", "654321", "lisi@qq.com", "女", 22);
System.out.println(u2.getName() + " " + u2.getAge()); // 李四 22
}
}3.4 開發(fā)神器:快捷鍵生成標(biāo)準(zhǔn)JavaBean(效率翻倍,必會(huì))
實(shí)際開發(fā)中,手動(dòng)編寫setXxx/getXxx和構(gòu)造方法非常繁瑣,IDEA提供了快捷鍵一鍵生成,大幅提升編碼效率,這是開發(fā)必備技巧!
核心快捷鍵(IDEA)
- Windows/Linux:
Alt + Insert - Mac:
Alt + Fn + Insert
分步生成步驟
- 先編寫好類的私有化成員變量;
- 按下快捷鍵,選擇Constructor(構(gòu)造方法),生成無參構(gòu)造和帶全部參數(shù)的構(gòu)造方法;
- 生成無參構(gòu)造:直接選中無參選項(xiàng)回車;
- 生成帶全部參數(shù)構(gòu)造:按
Ctrl + A全選成員變量,回車;
- 再次按下快捷鍵,選擇Getter and Setter,按
Ctrl + A全選成員變量,回車,一鍵生成所有setXxx/getXxx方法; - 完成!標(biāo)準(zhǔn)JavaBean類一鍵生成,無需手動(dòng)編寫。
進(jìn)階插件:PTG(1秒生成JavaBean)
如果覺得快捷鍵還不夠快,可以安裝IDEA插件PTG,支持根據(jù)屬性名一鍵生成完整的標(biāo)準(zhǔn)JavaBean類,快捷鍵:Ctrl + Shift + 豆子,開發(fā)效率拉滿!
3.5 標(biāo)準(zhǔn)JavaBean類核心總結(jié)(必背)
- 標(biāo)準(zhǔn)JavaBean是企業(yè)開發(fā)的統(tǒng)一規(guī)范,用于封裝數(shù)據(jù),是項(xiàng)目基礎(chǔ);
- 核心要求:私有化成員變量 + 無參構(gòu)造 + 帶全參構(gòu)造 + 全套setXxx/getXxx;
- 開發(fā)技巧:使用IDEA快捷鍵
Alt + Insert一鍵生成,避免手動(dòng)編寫繁瑣代碼; - 核心作用:封裝數(shù)據(jù)、保證數(shù)據(jù)安全、提高代碼可維護(hù)性,適配企業(yè)團(tuán)隊(duì)開發(fā)。
? 核心知識(shí)點(diǎn)總結(jié)(精華提煉,查漏補(bǔ)缺)
this關(guān)鍵字核心
- 基礎(chǔ)用法:區(qū)分同名的成員變量和局部變量,
this.指向成員變量; - 本質(zhì):當(dāng)前方法調(diào)用者的對(duì)象地址,哪個(gè)對(duì)象調(diào)用,this就指向哪個(gè)對(duì)象;
- 自動(dòng)傳遞:JVM為成員方法自動(dòng)分配,無需手動(dòng)定義。
構(gòu)造方法核心
- 特殊方法,方法名與類名一致,無返回值類型,由JVM自動(dòng)調(diào)用;
- 核心作用:創(chuàng)建對(duì)象時(shí)為成員變量完成初始化;
- 分類:無參構(gòu)造、帶參構(gòu)造,支持重載;
- 關(guān)鍵注意:手動(dòng)定義構(gòu)造方法后,默認(rèn)無參構(gòu)造失效,推薦手動(dòng)編寫無參構(gòu)造;
- 與setXxx區(qū)別:構(gòu)造方法創(chuàng)建對(duì)象時(shí)賦值(一次),setXxx創(chuàng)建對(duì)象后賦值(多次)。
標(biāo)準(zhǔn)JavaBean核心
- 企業(yè)級(jí)統(tǒng)一規(guī)范:私有化成員變量 + 無參構(gòu)造 + 全參構(gòu)造 + 全套setXxx/getXxx;
- 開發(fā)技巧:IDEA快捷鍵
Alt + Insert一鍵生成構(gòu)造方法和set/get; - 核心作用:封裝數(shù)據(jù),適配團(tuán)隊(duì)開發(fā),保證代碼規(guī)范統(tǒng)一。
寫在最后
本文是Java面向?qū)ο蟮暮诵倪M(jìn)階內(nèi)容,也是企業(yè)開發(fā)的基礎(chǔ)規(guī)范內(nèi)容。this關(guān)鍵字、構(gòu)造方法、標(biāo)準(zhǔn)JavaBean類,這三個(gè)知識(shí)點(diǎn)看似獨(dú)立,實(shí)則緊密關(guān)聯(lián):this解決了變量名沖突問題,構(gòu)造方法實(shí)現(xiàn)了對(duì)象的高效初始化,標(biāo)準(zhǔn)JavaBean則將封裝、this、構(gòu)造方法整合,形成了企業(yè)開發(fā)的統(tǒng)一編碼規(guī)范。
很多同學(xué)初學(xué)這些知識(shí)點(diǎn)時(shí),會(huì)覺得“規(guī)則太多、記不住”,這是正常的。Java是一門強(qiáng)規(guī)范的語言,面向?qū)ο蟮囊?guī)范更是如此,這些規(guī)則不是憑空制定的,而是為了解決實(shí)際開發(fā)中的問題、適配團(tuán)隊(duì)協(xié)作而總結(jié)的最佳實(shí)踐。
學(xué)習(xí)的關(guān)鍵不是死記硬背規(guī)則,而是理解規(guī)則背后的原因,多動(dòng)手練習(xí):多寫幾個(gè)標(biāo)準(zhǔn)JavaBean類,用快捷鍵生成代碼,體會(huì)this和構(gòu)造方法的使用場景,慢慢的你就會(huì)發(fā)現(xiàn),這些規(guī)范會(huì)成為你的編碼習(xí)慣,寫代碼時(shí)會(huì)自然而然的遵循。
到此這篇關(guān)于Java面向?qū)ο螅簍his關(guān)鍵字+構(gòu)造方法+標(biāo)準(zhǔn)JavaBean的文章就介紹到這了,更多相關(guān)java this關(guān)鍵字 構(gòu)造方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)習(xí)JVM之java內(nèi)存區(qū)域與異常
關(guān)于JVM內(nèi)存區(qū)域的知識(shí)對(duì)于初學(xué)者來說其實(shí)是很重要的,了解Java內(nèi)存分配的原理,這對(duì)于以后JAVA的學(xué)習(xí)會(huì)有更深刻的理解。下面來看看詳細(xì)介紹。2016-07-07
Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案
今天小編就為大家分享一篇關(guān)于Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
SpringBoot項(xiàng)目打包成jar后獲取classpath下文件失敗的解決
這篇文章主要介紹了SpringBoot項(xiàng)目打包成jar后獲取classpath下文件失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot使用MyBatis-Flex實(shí)現(xiàn)靈活的數(shù)據(jù)庫訪問
MyBatisFlex是一款優(yōu)秀的持久層框架,本文主要介紹了SpringBoot使用MyBatis-Flex實(shí)現(xiàn)靈活的數(shù)據(jù)庫訪問,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
springboot整合shardingjdbc實(shí)現(xiàn)分庫分表最簡單demo
我們知道分庫分表是針對(duì)某些數(shù)據(jù)量持續(xù)大幅增長的表,比如用戶表、訂單表等,而不是一刀切將全部表都做分片,這篇文章主要介紹了springboot整合shardingjdbc實(shí)現(xiàn)分庫分表最簡單demo,需要的朋友可以參考下2021-06-06
基于Springboot+Junit+Mockito做單元測試的示例
本篇文章主要介紹了基于Springboot+Junit+Mockito做單元測試的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
lambda表達(dá)式解決java后臺(tái)分組排序過程解析
這篇文章主要介紹了lambda表達(dá)式解決java后臺(tái)分組排序過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Java設(shè)計(jì)模式之橋梁(Bridge)模式
這篇文章主要介紹了Java設(shè)計(jì)模式之橋梁(Bridge)模式,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java設(shè)計(jì)模式的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05

