day15 接口与异常
? 接口
是一種獨立于類的新機制,它關注的是行為。
接口的意義就體現在——讓沒有繼承關系的類共享這些行為,各有各的具體實現。
設計上:當我們發現一個或多個類的方法相同,又沒有繼承關系,則考慮接口。
命名:***able?? 關鍵字:interface?
屬性:只能公共靜態常量屬性,就算不寫關鍵字,也是默認三種情況。
構造:接口不能有構造,接口不能產生對象。
行為:只能是公共的抽象方法,即使不寫修飾符,也是默認這種狀況。
在jdk1.7以上的版本中,允許接口擁有已經實現了的方法,但必須用default關鍵字修飾。
接口的用處:1、讓類實現接口,而且是多實現的。
???????????????????? 類實現接口,使用implement關鍵字,并且重寫接口中的抽象方法。
???????????????????? 如果一個類實現一個接口,但沒有重寫全部的抽象方法,則這個類為抽象類。
???????????????????? 類可以實現多個接口,只能是單繼承。
?????????????????2、接口可以繼承接口,而且是多繼承的。
??????????????????????設計原則:接口隔離原則(接口最小原則)盡量定義小接口。
???????????????? 3、應用多態——接口引用指向實現接口的類的對象。
??????????????????????如果類沒有實現接口,不能用接口指向它的對象。
????????????????????? 接口引用==擁有莫種能力的東西。
抽象類和接口在設計上的區別:與生俱來(一脈相承)的行為寫到抽象類中;附屬添加的行為寫到接口,接口盡量定義小接口。
?
異常
問題:包括異常(Exception)和錯誤(Error)。
錯誤:程序不能用代碼解決的問題。包括硬件問題、環境問題、系統問題等。
異常:包括運行時異常和編譯時異常(檢查異常)。
運行時異常:程序在運行期間出現的異常。像常見的空指針異常、數組下標越界、類型轉換異常等。
編譯時異常:程序在編譯時,有紅線提示(unhandled Exception)信息的異常。不捕獲就不能通過編譯。
異常處理機制:在程序發生異常的地方,jvm會產生一個異常對象,先暫停程序運行,然后往下看有沒有捕獲異常,如果沒有,就返回方法的調用處,如果方法的調用處也沒有捕獲,就一層層往上返回,如果最后連main主方法都沒有捕獲異常,則返回JVM,jvm就會終止程序運行,并打印異常信息。期間任何一個環節捕獲了異常,程序都能在捕獲后的地方,繼續執行。
異常處理:1、預判提前處理異常發生的條件。
????????????? 2、異常捕獲try、catch
try塊、catch塊:
1、try塊運行可能發生異常的程序,catch塊判斷可能發生的異常,并給出相應的處理措施。
2、catch塊一次只能捕獲一個異常。
3、多個catch塊應從子到父的順序抒寫,否則子異常匹配不到。
4、e.printStackTrace();語句可以在catch塊中打印異常。
5、try、catch可以與其它條件控制語句混合使用,使程序即使發生了異常,也能回到異常發生的地方繼續執行。
finally塊不管是否發生異常,都要執行的代碼。
finally——資源的管理,通道的關閉。
finally的優先級非常高,不管break、continue還是return都無法阻止它被執行,它在它們之前執行。唯一能阻止finally執行的是System.exit()。
try、catch、finally都不能單獨存在。
try后面必有catch或finally。
catch/finally前面必有try。
拋異常
我們可以在業務邏輯處產生一個異常對象,使用throw關鍵字拋出這個異常。
當主動拋出的異常是一個編譯時異常的時候,必須在編譯期對本方法的調用者產生警告,需要在方法的聲明處添加throws,表明該方法有可能發生異常。
throws會影響到重寫的規范——子類重寫方法不能拋出比父類被重寫方法范圍更大的異常。
throw和throws的辨析:
1、throw和throws都是關鍵字,都屬于異常處理部分的。
2、throw是寫在方法體中的,后面跟的是一個異常對象。
throws是寫在方法聲明最后面的,后面跟的是一個或者多個異常類。
3、當運行到throw這句代碼的時候,就會真正發生拋出一個異常對象的動作。
throws是在編譯期警告本方法的調用者,有可能會發生哪些類型的異常。
4、當一個方法體中有throw語句,不一定會有throws,除非throw后面跟的是編譯期異常,那就必須寫throws。
自定義異常:
三層架構:
表示層??? 業務層????? 數據訪問層
1、自定義異常必須繼承Exception。
2、自定義異常至少有兩個帶參構造,一個帶異常參,一個帶字符串參,前者用于把其它異常類型轉換為自定義異常,后者用于操作非jvm主動拋出的業務異常。
3、可以給自定義異常提供拓展方法。
一個完整的方法聲明:訪問修飾符 可選修飾符 返回類型 方法名(形參列表)throws拋出的異常列表。
轉載于:https://www.cnblogs.com/fengshaolingyun/p/6146461.html
總結
以上是生活随笔為你收集整理的day15 接口与异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TKinter的常用组件
- 下一篇: Coprime Conundrum 容