一、列舉常數值Enum的功能應用
二、Design Patterns 設計樣板
三、Nested Classes 巢狀類別
一、列舉常數值Enum的功能應用
其存取修飾值只能是default與private =>編譯器最終都會轉成 private static final
♠列舉搭配for迴圈使用
♠列舉所產生的記憶體配置
♠列舉搭配 switch 使用
valuesOf()
碰到要轉字串的地方,會呼叫 toString()
碰到要轉數字的地方,會呼叫ordinal()
♠列舉常數值直接使用自己的建構子方法
♠練習使用列舉的建構子方法
♦傳入兩個參數
♠列舉常數值覆蓋toString()的專屬方法
二、Design Patterns 設計樣板
推薦一位作者:Erich Gamma
設計樣板:寫程式的範例。程式設計師遇到瓶頸,經年累月找出一個較好的解決方式,並整理出一個設計程式的形式,稱為設計樣板。
這邊只介紹一種設計樣板:單例(單體)Singleton
方法:
1.new 一個自己的物件,存取修飾值為 private static final
2.宣告私有的預設建構子
3.寫一個公開的方法(Method) 用來取得第1步驟已建立物件的地址
♠實作
♦ 記憶體配置
r1取得JVM已建立物件的地址
r2也是取得JVM已建立物件的相同記憶體空間
三、Nested Classes 巢狀類別(內部類別)
外部類別的存取修飾值只能是:public、default、final、abstract
內部類別的存取修飾值都可以使用
共有四種:
1.非靜態的內部類別
(一般內部類別)
♠建立非靜態內部類別物件時,必須先建立外部類別物件
語法:外部類別 物件變數1=new 外部類別建構子()
外部類別.內部類別 物件變數2=物件變數1.new 內部類別建構子()
當建立非靜態內部類別物件時
JVM會產生兩個隱藏變數「this」與「外部類別名稱.this」
如此可以呼叫到 外部類別的變數與方法
♦學會 存取外部類別的屬性變數、內部類別的屬性變數、區域變數 與 全域變數
利用 「this」與「外部類別名稱.this」來達成操作
♠如果類別只使用一次或無需使用,可以宣告「匿名物件」
2.靜態的內部類別
♠靜態內部類別中,可以宣告靜態的變數或方法
♠靜態內部類別中,如果沒有建立外部類別物件,就使用到外部類別的屬性數變或方法時,編譯會出錯
♠靜態內部類別中的靜態方法內,如果使用到內部區域變數時,編譯會出錯。因為JVM在配置靜態的東西時,會與非靜態的記憶體區塊不同,所以會無法找到此區域變數。
只有在方法內才能使用的類別,所以實用性很低。
4.匿名的內部類別
講解一下觀念跟語法演變的由來就下課啦~
♠語法演變:
一般介面類別必須由另一個類別繼承且實作後,才能建立物件
interface(or abstract or class) 介面名稱(or 抽象類別名稱 or 類別名稱){
}
class 類別名稱 implements(or extends) 介面名稱(抽象類別名稱 or 類別名稱){
}
主程式建立物件的語法: 類別名稱 物件參考變數 = new 建構子();
------------------------------------------------------------------------------------------------
匿名類別顧名思義就是類別是沒有名字的,那麼就無法再次使用這個類別
那主程式建立物件的語法中 類別名稱 就沒有辦法填寫
那怎麼辦呢?
把語法 改變一下
類別名稱 → 父類別的介面名稱(or 抽象類別名稱 or 類別名稱)
物件參考變數 保留
建構子() → 後面加上子類別{ }全部內容
分號; 保留
就變成投影片中的匿名內部類別的語法
作業:十進位轉二進位、八進位與十六進位
class Digit{
class Binary{
}
class Octal{
}
class Hex{
}
}
寫2種。第1種 非靜態內部類別;第2種 靜態內部類別
後記:
1.學了許多 特別的使用方式,讓問題更多方法可以解決。
2.下次課程湯老師說會稍微講一下圖形介面的開發。
沒有留言:
張貼留言