2015年3月1日 星期日

JAVA7-課程10

        接續「列舉常數值」的應用,有許多功能可以探討。
        一、列舉常數值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在配置靜態的東西時,會與非靜態的記憶體區塊不同,所以會無法找到此區域變數。




        3.方法內的內部類別
                   只有在方法內才能使用的類別,所以實用性很低。

                ♠探討 方法內的區域變數  跟  方法內的內部類別  生命長短問題


        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.下次課程湯老師說會稍微講一下圖形介面的開發。

沒有留言:

張貼留言