1. 程式人生 > 其它 >3.2 構造器、this、包機制、訪問修飾符、封裝

3.2 構造器、this、包機制、訪問修飾符、封裝

構造器

構造器:在例項化的一個物件的時候會給物件賦予初始值,因此我們可以通過修改構造器,來改變物件的初始值,構造器是完成物件的初始化,並不是建立物件

我們也可以建立多個構造器實現不同的初始化,即構造器的過載

預設初始化:

  • 數字: 整形是0 浮點型是0.0
  • char:u0000
  • boolean:false
  • 引用: null

一個類即使什麼也不寫,它的class檔案也會自帶一個構造方法,這個方法也叫構造器;當然我們也可以直接在java檔案裡寫一個構造器

構造器的規則:

  • 方法的名字必須和類名相同
  • 不能有返回值 也不能寫void

構造器的作用:

  • 使用new的時候必須要有構造器,本質是在呼叫構造器
  • 構造器一般用來初始化值

預設的無參構造器:(下圖為隱式無參構造)

修改後的無參構造器:(下圖為顯式無參構造)

有參構造:

一旦定義了有參構造,無參構造就必須顯式定義,否則new一個無參的物件時會報錯

有參構造的使用如下圖:

物件建立的流程: (下圖出自B站韓順平教育,韓老師yyds!!)

  1. 載入Person類資訊(Person.class)
  2. 在堆中分配空間
  3. 完成物件初始化
    1. 預設初始化age=0 name=null
    2. 顯示初始化 age=90,name=null
    3. 構造器的初始化 age=20,name=“小倩”
    4. 把物件在堆中的地址返回給 p(p是物件名,也可以是物件的引用)

this

先來一個小實驗:

這時候this就很有用了。使用this可以解決構造器中的age、name是區域性變數而不是屬性的問題

再來一個小實驗:

結論:當我們new了很多個物件時,每個物件都有自己的this,this指向堆中的物件本身簡單來說,那個物件呼叫,this就代表哪個物件

this的注意事項和使用細節:

  • this關鍵字可以用來訪問本來的屬性、方法、構造器
  • this用於區分當前類的屬性和區域性變數
  • 訪問同類中其他方法的語法:this.方法名(引數列表);
  • 訪問構造器語法:this(引數列表)(引數列表不用寫引數型別);注意只能在構造器中使用,且必須是第一條語句(即只能在構造器中訪問另外一個構造器)
  • this不能再類定義的外部使用,只能在類定義的方法中使用

包機制

包的本質就是建立資料夾來存放類

一般利用域名倒置作為包名

定義包:package pkg1.pkg.2 必須寫在最上面 package是關鍵字;一個類中最多隻有一個package

為了使用某個包的成員,需要在java程式中匯入這個包 用import pkg1.pk2 import必須在定義包的下面 如: import com.ohj.* 匯入com.ohj這個包下所有的類;

若使用兩個包中相同名字的類時,第一個使用的類import匯入包,第二個使用的類不能通過import,而是通過直接通過路徑加上類來使用
使用哪個類,就匯入哪個類,不建議用 *

包命名規範:

  • 包名只能是數字、字母、下劃線、小圓點,數字不開頭,不能是關鍵字
  • 一般都是小寫
  • 一般寫成: com.公司名.專案名.業務模組名

常用的包:

  • java.util.* //util包,系統提供的工具包,工具類
  • java.net.* //網路包,網路開發
  • java.awt.* //做java頁面開發的,GUI

訪問修飾符

訪問修飾符用於控制方法和屬性以及類的訪問許可權,分為4種:

  • public:公開級別,對外公開
  • protected:受保護級別,對子類和同一個包中的類公開
  • default:預設級別,直接沒有修飾符號就是default,向同一個包中的類公開
  • private:私有級別,只有類本身可以訪問,不對外公開,外面需要通過get、set方法來進行使用

方法和屬性的修飾符能用上面的四種,但是類的只能用public和預設


封裝

封裝的好處:

  • 隱藏實現細節
  • 可以對資料進行驗證,保證安全合理

封裝也就是避免直接訪問物件中資料的實際表示,通過操作介面來訪問

封裝大多數是對於屬性來進行操作的,也就是屬性私有,關鍵字private;通過封裝可以讓別的類無法使用自己的私有屬性。

通過在設定屬性的時候在前面加上private關鍵字 讓屬性變得私有。

private與public 是對立的

既然屬性已經私有了,那麼別的類想用這個屬性的時候,必須在屬性所在的類裡提供一些可以操作這個屬性的方法,也就是get和set

get:可以獲得這個屬性 get的時候也有駝峰命名法,規則就是get+大寫屬性的一個字母

set:可以給這個屬性設定值 set的時候也有駝峰命名法,規則就是set+大寫屬性的一個字母 set方法是void型別,且必須要有個引數
若定義了有參構造器,有參構造器避開了set方法,避開了資料的驗證,那麼我們可以在有參構造器中呼叫set方法,這樣資料就不會通過構造器規避了資料驗證

我們可以通過在set方法裡設定一些判斷,來規避掉不合理的值

操作如下圖:

封裝可以提高程式的安全性,保護資料;可以隱藏程式碼的實現細節;統一了介面也就只用get、set