Java三大特性之封裝詳解
封裝概述
概述
面向對象編程語言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改。 封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。要訪問該類的數(shù)據(jù),必須通過指定的方式。適當?shù)姆庋b可以讓代碼更容易理解與維護,也加強了代碼的安全性。
原則
將屬性隱藏起來,若需要訪問某個屬性,提供公共方法對其訪問。
封裝的步驟
- 使用 private 關鍵字來修飾成員變量。
- 對需要訪問的成員變量,提供對應的一對 getXxx 方法 、setXxx 方法。
封裝的操作—private關鍵字
private的含義
- private是一個權限修飾符,代表最小權限。
- 可以修飾成員變量和成員方法。
- 被private修飾后的成員變量和成員方法,只在本類中才能訪問。
private的使用格式
private 數(shù)據(jù)類型 變量名 ;
1.使用 private 修飾成員變量,代碼如下:
public class Student {
// 成員變量
private String name;
private int age;
}2.提供 getXxx 方法 / setXxx 方法,可以訪問成員變量,代碼如下:
public class Student {
// 成員變量
private String name;
private int age;
// Getter Setter
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
}
封裝優(yōu)化1—this關鍵字
我們發(fā)現(xiàn) setXxx 方法中的形參名字并不符合見名知意的規(guī)定,那么如果修改與成員變量名一致,是否就見名知意 了呢?代碼如下:
public void setName(String name) {
name = name;
}
public void setAge(int age) {
age = age;
}
經(jīng)過修改和測試,我們發(fā)現(xiàn)新的問題,成員變量賦值失敗了。也就是說,在修改了setXxx() 的形參變量名后,方 法并沒有給成員變量賦值!這是由于形參變量名與成員變量名重名,導致成員變量名被隱藏,方法中的變量名,無法訪問到成員變量,從而賦值失敗。所以,我們只能使用this關鍵字,來解決這個重名問題。
this的含義
this代表所在類的當前對象的引用(地址值),即對象自己的引用。 記住 :方法被哪個對象調(diào)用,方法中的this就代表那個對象。即誰在調(diào)用,this就代表誰。
this使用格式
this.成員變量名;
使用 this 修飾方法中的變量,解決成員變量被隱藏的問題,代碼如下:
public class Student {
// 成員變量
private String name;
private int age;
// Getter Setter
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
小貼士:方法中只有一個變量名時,默認也是使用 this 修飾,可以省略不寫。
封裝優(yōu)化2—構造方法
當一個對象被創(chuàng)建時候,構造方法用來初始化該對象,給對象的成員變量賦初始值。
小貼士:無論你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個無參數(shù)構造方法,一旦自己定義了構造方法,Java自動提供的默認無參數(shù)構造方法就會失效。
構造方法的定義格式
修飾符 構造方法名(參數(shù)列表){ // 方法體 }
構造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,甚至不需要void。使用構造方法后,代碼如下:
public class Student {
// 成員變量
private String name;
private int age;
// 無參數(shù)的構造方法
public Student() {
System.out.println("無參構造方法執(zhí)行啦!");
}
// 全參數(shù)的構造方法
public Student(String name, int age) {
System.out.println("全參構造方法執(zhí)行啦!");
this.name = name;
this.age = age;
}
}
注意事項
- 如果你不提供構造方法,系統(tǒng)會給出無參數(shù)構造方法。
- 如果你提供了構造方法,系統(tǒng)將不再提供無參數(shù)構造方法。
- 構造方法是可以重載的,既可以定義參數(shù),也可以不定義參數(shù)。
標準代碼—JavaBean
JavaBean 是 Java語言編寫類的一種標準規(guī)范。符合JavaBean 的類,要求類必須是具體的和公共的,并且具有無 參數(shù)的構造方法,提供用來操作成員變量的set 和get 方法。
public class ClassName{
//成員變量
//構造方法
//無參構造方法【必須】
//有參構造方法【建議】
//成員方法
//getXxx()
//setXxx()
}
編寫符合JavaBean 規(guī)范的類,以學生類為例,標準代碼如下:
public class Student {
// 成員變量
private String name;
private int age;
// 無參數(shù)的構造方法
public Student() {
System.out.println("無參構造方法執(zhí)行啦!");
}
// 全參數(shù)的構造方法
public Student(String name, int age) {
System.out.println("全參構造方法執(zhí)行啦!");
this.name = name;
this.age = age;
}
// Getter Setter
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}到此這篇關于Java三大特性之封裝詳解的文章就介紹到這了,更多相關Java封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot 應用實現(xiàn)動態(tài)刷新配置詳解
這篇文章主要介紹了spring boot 配置動態(tài)刷新實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2021-09-09
SpringBoot項目為何引入大量的starter?如何自定義starter?
這篇文章主要介紹了SpringBoot項目為何引入大量的starter?如何自定義starter?文章基于這兩個問題展開全文,需要的小伙伴可以參考一下2022-04-04
java.util.Collections類—emptyList()方法的使用
這篇文章主要介紹了java.util.Collections類—emptyList()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot集成Prometheus實現(xiàn)監(jiān)控的過程
這篇文章主要介紹了SpringBoot集成Prometheus實現(xiàn)監(jiān)控,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09

