2015年1月25日 星期日

JAVA7-課程7

        一開始就講到介面,讓我非常得開心;但這個介面似乎只是類別的另一種應用而已?!
        1.介面interface
        2.多型Polymorphism
        3.例外處理
        4.package部屬
一、介面interface
        目的:規範開發方法。
        方式:宣告空的給兒子自己去使用。
        

    ※要使用介面的條件必須為「沒有繼承關係的類別」。
            變數型態為「public static final」,必須給初值。
            方法型態為「public abstract」,不給參數且不寫{}。
       語法:class 類別名稱 implements 介面名稱1,介面名稱2, ...{
                   }
                 
                   interface 介面名稱 extends 介面名稱1,介面名稱2, ...{
                   }
        ♠介面覆蓋的問題




♦complier error


        ♠修正後即可執行

        ♠測試變數型態是否為public static final

♦complier error


二、多型polymorphism
        目的:使用同一個變數可以操作多種空間。
        語法:父類別 物件變數=new 子類別建構子方法。
        ♠測試-有覆蓋成功的方法可以直接呼叫;否則不能呼叫


 ♦祖父 obj1=new 父親建構子

♦complier error

♦obj1記憶體配置
       ♠強制轉型:切換成以parent的角度來操作,即可成功。

        ♠另一層的關係 「祖父 obj3 = new 孫子建構子」
          以patent角度來操作,但無法在這個類別中找到method3
♦complier error




       ♠練習





三、例外處理
此表需要牢記類別名稱與關係
        例外有兩種:
                1.系統錯誤Error:程式設計師不需要處理此例外
                2.例外Exception:
                          可以再分五種:
                                  (1)執行例外RuntimeException
                                               程式設計師不需要處理此例外
                                               應該要用判斷式直接處理掉
                                  (2)輸出輸入例外IOException
                                  (3)類別例外ClassNotFoundException
                                  (4)資料庫例外SQLException
                                  (5)中斷例外InterruptedException

        目的:不讓程式碼直接中斷。

        語法:


     
        ♠測試例外產生時,會發生什麼樣的事情
 ♦故意把除數輸入0。                
再繼續執行後,發生例外!
屬於RuntimeException          

        ♠修正上面的程式碼
          原本RuntimeException是不需要用例外處理,這邊為測試程式碼,所以故意寫例外處理。
          測試例外會不會被catch捕捉,並測試finally是不是一定會執行。
 ♦例外有被捕捉 且 一定會執行finally
       
        ♠catch的例外類別,子類別要寫在上面,父類別要寫在下面;否則會complier error!
 ♦它說例外已經被捕捉了!

        ♠這個除法還是會有例外產生,就是輸入浮點數時...
 ♦inputMismatchException不是靜態
所以要先import


        ♠練習處理例外




四、package部屬
        資料夾的名稱選擇,建議使用公司網址倒過來寫。
                例如:tw.com.pcschool.Sales     (銷售部門)
                                                       .Human  (人事部門)
                                                       .Util        (共通性高的)





     
        ♠實作部屬流程(有好多步驟...)
♦寫第一個類別
 ♦存檔(.java)
 ♦轉換資料夾
編譯
 ♦會發現到已經建立一個資料夾shape
 ♦下層還有一個資料夾rect
 ♦在rect資料夾裡面                
有一個已經編譯好的檔案
 ♦寫第二個類別
 ♦存檔(.java)
 ♦編譯
 ♦在rect資料夾底下,又編譯好一個檔案
 ♦寫第三個類別
 ♦存檔(.java)
 ♦編譯發生錯誤
因為不同資料夾
所以必須要import其他類別
 ♦import有使用到的類別
 ♦編譯錯誤
因為Rectangle並不是公開的
所以還要再回去修改Rectangle類別的存取範圍
 ♦修改成 公開 Public
 ♦先編譯Rectangle
再編譯Cube
就可以編譯成功
 ♣如果把super.area()修改成len*width的話
編譯又會錯誤
 ♣編譯錯誤,因為len與width只能給鄰居使用
但Cube編譯後放在不同資料夾內
所以沒有辦法直接使用
 ♣再回去修改Rectangle類別                     
len與width的存取權限使用protected
 ♣這樣編譯就會成功

♦看一下編譯成功後,資料夾的樣子
有一個cube資料夾
底下有一個編譯好的檔案

♦寫主程式

 ♦存檔(.java)
 ♦編譯錯誤
放在不同資料夾
所以要import
 ♦回去修改主程式
加上import shape.rect.Rectangle;
 ♦還是編譯錯誤
剛剛寫的Cube類別也跟主程式放在不同地方
必須修改存取權限,才能使用
還有Rectangle的變數len,width也是權限不夠,必須修改
 ♦回去修改Cube的存取權限
 ♦回去修改Rectangle的存取權限
 ♦怎麼還是編譯錯誤
原來Cube裡的height權限不夠
 ♦再回去Cube修改變數height的權限
 ♦總算編譯成功了
 ♦看一下資料夾
 ♦matter資料夾中有一個編譯好的主程式檔案
 ♦執行成功嚕~



        ♠如果要把剛剛寫的程式碼(.java),全部編譯到令一個資料夾底下,可以使用另一個語法。
♦把它全部編譯到Sunday java 7 package2
 ♦語法如下
怪了~ 怎麼編譯錯誤
 ♦最後發現到是資料夾名稱的問題
資料夾命名時,不可以有空白
否則編譯的語法會因為空白而無法正常執行
 ♦再試一次
編譯過啦!
 ♦看看結果
SundayJava7Package2資料夾底下
有建立我們部屬的東西了!
 ♦也可以執行唷~
後記:
        1.packge準備打包成程式~
          下星期將介紹如何封裝程式檔
          然後包裝成給客戶的程式嚕~

        2.學了這麼多,原來還只是基礎
           我想要寫圖形介面、多工啦~

        3.今天中餐離巨匠很近,是拉麵唷~點了一碗很陽春的拉麵~65元

沒有留言:

張貼留言