Java語言進階 #繼承&多態 #Day11 #命名規範 #註釋模板 #權限修飾符 #內部類 #繼續發紅包

一、final

final最終的,最後的,不可變的

  • final的四種應用場景:
  1. 修飾類 : 太監化,不能有子類
    與abstract關鍵字矛盾(抽象類不能直接用,一定要有子類)
    在這裏插入圖片描述

  2. 修飾成員方法 : 最終方法,不能被覆蓋重寫
    與abstract關鍵字矛盾(抽象方法一定要覆蓋重寫,所以衝突)
    在這裏插入圖片描述

  3. 修飾局部變量(局部常量) :只能賦值一次
    對於基本數據類型而言,不可變指:值不可變
    對於引用數據類型而言,不可變指:地址不可變
    在這裏插入圖片描述

  4. 修飾全局變量(全局常量) :在創建時就必須手動賦值(使用final關鍵字,不會再有默認值,所以需要手動賦值)。要麼使用直接賦值 ,要麼通過構造方法 賦值
    在這裏插入圖片描述

二、命名規範&註釋模板

1. 命名規範

1.1 通用規定

類別 命名規範
項目名 全部小寫
包名 全部小寫
類名 大駝峯
變量名,方法名 小駝峯
常量名 全部大寫,下劃線分隔

所有命名規則必須遵循以下規則 :

  1. 名稱只能由字母、數字、下劃線、$符號組成.
  2. 不能以數字開頭.
  3. 名稱不能使用Java中的關鍵字.
  4. 堅決不允許出現中文及拼音命名.

1.2 包名規定

在Java編程規範中要求開發人員在自己定義的包名前加上唯一的前綴(爲了保障每個Java Package命名的唯一性)。由於互聯網上的域名稱是不會重複的,所以多數開發人員採用自己公司在互聯網上的域名稱(一般是反過來用,比如com.baidu)作爲自己程序包的唯一前綴

  1. com:公司項目,copyright由項目發起的公司所有.
      包名 : com.公司名.項目名.模塊名
  2. team : 團隊項目,指由團隊發起,並由該團隊開發的項目,copyright屬於該團隊所有.
      包名 : team.團隊名.項目名.模塊名

  1. indi : 個體項目,指個人發起,但非自己獨自完成的項目,可公開或私有項目,copyright主要屬於發起者(也有公司寫作onem
      包名 : indi.發起者名.項目名.模塊名…

  2. pers : 個人項目,指個人發起,獨自完成,可分享的項目,copyright主要屬於個人.
      包名 : pers.個人名.項目名.模塊名…

  3. priv : 私有項目,指個人發起,獨自完成,非公開的私人使用的項目,copyright屬於個人.
      包名 : priv.個人名.項目名.模塊名

2. 註釋模板

2.1 類註釋

在這裏插入圖片描述

2.2 屬性註釋

在這裏插入圖片描述

2.3 方法註釋

在這裏插入圖片描述

2.4 構造方法註釋

在這裏插入圖片描述

三、權限修飾符

在這裏插入圖片描述

四類分別對應: 我自己我鄰居我兒子陌生人


  • private私有的意思,只能自己內部調用
  • (default)缺失的意思,之前說過,同包連導包語句都可省,省個權限修飾符也沒什麼毛病吧
  • protected保護的,父子間血脈是受保護的

四、內部類

一個類內部,包含另一個類。這個裏面的類,就叫做內部類
爲什麼要有內部類?心臟可以看做一個類吧?脫離了身體類,它就沒有意義。所以心臟類就是一個內部類。

分類:

  1. 成員內部類
  2. 局部內部類(包含匿名內部類)

1. 內部類的定義格式

內部類和外部類的格式一模一樣

public class 內部類名稱 {}
  • 注意: 內部類可以隨意訪問外部類,外部類需要藉助內部類對象
    在這裏插入圖片描述

  • 可以看到13行定義了一個外部類私有方法,8行的內部類調用成功(沒標紅報錯)

  • 19~23外部類調用內部類方法,需要先創建了內部類對象

2. 內部類的使用

內部類的使用,可以分爲間接使用直接使用 兩種方式

  • 間接使用: 通過外部類方法調用內部類方法
    可以採取匿名對象的方式
    在這裏插入圖片描述

  • 直接使用: 直接創建內部類對象,再調用方法

// 直接使用的格式
外部類.內部類 對象名 = new 外部類().new 內部類();

  • 類文件
    在這裏插入圖片描述
  • 運行文件
    在這裏插入圖片描述

提示:內部類的編譯

內部類究竟是怎樣的存在?或者說,內部類究竟在編譯過程中,發生了什麼?

  1. 打開out文件夾(裏面放着編譯後的.class文件)
    在這裏插入圖片描述
  2. 找到項目文件夾
  3. 查看
    在這裏插入圖片描述
  • 發現: 內部類的命名利用了外部類$內部類的形式

3. 重名變量訪問

外部類訪問內部類很好辦,因爲要通過內部類對象。
內部類如何訪問外部類的重名變量呢?

外部類名.this.重名變量;

在這裏插入圖片描述

4. 局部內部類

局部內部內核成員內部類就是放的位置不一樣,注意這個內部類只能在這個方法內。
在這裏插入圖片描述

小提示: 其實可以通過這個方法,return一個Object,然後向下轉型。但是這樣做很麻煩,不提倡。

5. 類的權限修飾符

在這裏插入圖片描述

  • 外部類: public(default)
    在這裏插入圖片描述
    外部類,私有化還有意義嘛?(不能調用)
  • 成員內部類: publicprotected(default)private
    在這裏插入圖片描述
  • 局部內部類: 啥都不能寫(不是(default)的意思)

6. 局部內部類的final問題

  1. new出來的對象在堆當中
  2. 成員方法在棧中
  3. 成員方法運行完畢,出棧,局部變量消失
  4. 對象要等垃圾回收才失效

問題來了: 如果這個局部內部類要用局部變量咋辦?局部變量消失後
解決辦法: 讓這個局部內部類,把需要的局部變量複製一份(當然這個複製的動作不需要我們做)。如果這個局部變量會變的話,複製哪個?所以,不能讓它變,要加上final關鍵字

Java8開始,final可以省略不寫。(這叫【有效final】)

7. 匿名內部類 【重點!】

如果接口的實現類(或子類)只需要使用一次,就可以使用匿名內部類

接口名稱 對象名 = new 接口名稱() {
	// 重寫所有抽象方法
}

  1. 先定義一個接口
    在這裏插入圖片描述

  2. 通過【匿名內部類】直接調用(藍底就是匿名內部類),注意結尾的分號
    在這裏插入圖片描述

  3. 調用方法,結果
    在這裏插入圖片描述

注意

匿名內部類省略的是類名稱 (省略了實現類/子類名稱),而不是對象名稱 。下面這個兩個都省了,叫做匿名對象匿名內部類

new 接口名稱() {
	// 重寫所有抽象方法
}

匿名內部類 是在創建對象時,只能使用唯一一次
匿名對象 是在調用方法時,只能使用唯一一次

8. 類作爲成員變量類型

以下爲了方便,我沒有使用標準格式(私有化+Getter/Setter,這樣代碼看上去也不至於凌亂)

  • 創建一個武器類
    在這裏插入圖片描述
  • 創建一個英雄類 (武器類作爲數據類型)
    在這裏插入圖片描述
  1. 運行
    在這裏插入圖片描述

9. 接口作爲成員變量類型

  • 接口
    在這裏插入圖片描述
  • 用接口作爲成員變量類型
    在這裏插入圖片描述
  • 運行
    在這裏插入圖片描述

當然,還可以使用匿名對象進一步簡化

五、Test:繼續發紅包

1. 準備複製

素材在我上傳的文件裏,包括圖片和接口。

2. 紅包實現

2.1 創建紅包

  1. 創建一個新文件,創建RedPacketFrame類對象,發現是一個抽象類。所以下一步要創建一個它的實現類
    在這裏插入圖片描述
  2. 出現紅線,按Alt 回車,選擇第一項。按照提示,在運行文件中創建實現類實例並傳入參數“標題”
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

2.2 測試程序

  1. 直接運行
    在這裏插入圖片描述
  2. 金額、個數、留言都沒問題。塞錢進紅包也沒問題
    在這裏插入圖片描述
  3. 點擊頁面上的元素,看看哪些功能沒完成
    在這裏插入圖片描述
    在這裏插入圖片描述

2.3 實現平均紅包

  1. 按照提示,輸入羣主名稱
    在這裏插入圖片描述
  2. 設置打開方式,發現要使用OpenMode接口
    在這裏插入圖片描述
  3. 創建這個接口的實現AvergeMode
    在這裏插入圖片描述
  4. 創建接口實現對象,並傳入
    在這裏插入圖片描述
    在這裏插入圖片描述

2.4 隨機紅包

關鍵就是創建一個新的接口實現類(注意觀看註釋,這應該是最接近隨機的一種方法了)
在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章