多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)
生活随笔
收集整理的這篇文章主要介紹了
多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
多態(tài)的概念:
- 多態(tài)性是指同一個(gè)操作作用于某一類(lèi)對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。
- 多態(tài)存在的三個(gè)必要條件: ① 需要存在繼承或?qū)崿F(xiàn)關(guān)系 ② 同樣的方法調(diào)用而執(zhí)行不同的操作、運(yùn)行不同代碼(重寫(xiě)) ③ 在運(yùn)行時(shí)父類(lèi)或者接口的引用變量可以引用其子類(lèi)的對(duì)象。
- 多態(tài)的作用: ① 多態(tài)通過(guò)分離做什么和怎么做,從一個(gè)角度將接口和實(shí)現(xiàn)進(jìn)行分離。 ② 多態(tài)消除了類(lèi)型之間的耦合關(guān)系 ③ 多態(tài)的存在提高了程序的拓展性和后期的可維護(hù)性。
對(duì)象的上下轉(zhuǎn)型:
- 由子類(lèi)轉(zhuǎn)換父類(lèi),在繼承圖上是向上移動(dòng)的,一般稱(chēng)為向上轉(zhuǎn)型
- 向上轉(zhuǎn)型是從一個(gè)較專(zhuān)用類(lèi)型向通用類(lèi)型轉(zhuǎn)換,所以總是安全的,也就是說(shuō),子類(lèi)是父類(lèi)的超集
- 向上轉(zhuǎn)型過(guò)程中,類(lèi)接口中唯一可能發(fā)生的事情是丟失方法,而不是獲取方法
- 與之相反的操作是向下轉(zhuǎn)型,不安全(可能需要instanceof操作符協(xié)助)
- instanceof運(yùn)算符用來(lái)在運(yùn)行時(shí)通過(guò)返回值來(lái)指出對(duì)象是否有特定類(lèi)或者它的子類(lèi)的一個(gè)實(shí)例。典型使用場(chǎng)合:在對(duì)對(duì)象做下轉(zhuǎn)型之前,沒(méi)有其他有關(guān)對(duì)象信息時(shí)務(wù)必使用instanceof來(lái)判斷一下,以避免拋出ClassCastException異常。用法如下:
- 對(duì)象的上下轉(zhuǎn)型舉例:
- 不使用多態(tài)代碼示例:
- 將上述代碼改為多態(tài)的形式進(jìn)行編寫(xiě),方便代碼功能的添加使代碼耦合性更強(qiáng)。
異常:
- 異常概念、異常分類(lèi)、java異常處理機(jī)制、try…catch…finally、throw和throws、自定義異常
異常的概念:
- 什么是異常? 所謂的異常是指在程序運(yùn)行的過(guò)程中發(fā)生的一些不正常事件(如:除0溢出,數(shù)組下標(biāo)越界,所要讀取的文件不存在)。
- 異常導(dǎo)致的后果? java程序的執(zhí)行過(guò)程中如出現(xiàn)異常事件,可以生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象封裝了異常事件的信息,并將其被提交給java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱(chēng)為拋出異常,不處理的話(huà)會(huì)直接導(dǎo)致程序直接中斷。
- 如何防止程序中斷? 設(shè)計(jì)良好的程序應(yīng)該在程序異常發(fā)生時(shí)提供處理這些異常的方法,使得程序不會(huì)因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可預(yù)見(jiàn)的結(jié)果。
- java異常的分類(lèi):分為error和Exception,error: 這個(gè)異常時(shí)系統(tǒng)運(yùn)行java虛擬機(jī)的異常,和代碼沒(méi)有關(guān)系,這種異常我們一般處理不了,基本上都是要去檢查操作系統(tǒng)和檢查運(yùn)行環(huán)境。Exception: 這個(gè)異常我們能夠處理,分為IOException和RuntimeException。
- 除了上面的異常分類(lèi)之外我們還將異常分為以下類(lèi)別:
| 受檢查異常(checkException) | Exception及其子類(lèi)(不包括RuntimeException) | 由代碼控制能力之外的因素導(dǎo)致的運(yùn)行時(shí)錯(cuò)誤 | 必須要處理,否則通不過(guò)編譯 |
| 非受查異常(uncheckedException) | Error和RuntimeException及其子類(lèi) | RuntimeException一般代表編程錯(cuò)誤 | 可以不用處理 |
- 受檢查異常: 比如說(shuō):去讀取磁盤(pán)上某個(gè)文件,文件不存在或者要連接某個(gè)服務(wù)器而連不上,因?yàn)檫@些原因產(chǎn)生的異常就要處理,否則程序可能會(huì)運(yùn)行到一半時(shí)崩了。
- 非受查異常: 比如說(shuō):java虛擬機(jī)運(yùn)行時(shí)的異常或者程序代碼里面類(lèi)似除數(shù)等于0這樣的異常或者多態(tài)處理上下轉(zhuǎn)型時(shí)的異常,這些都是編程時(shí)由于代碼問(wèn)題而導(dǎo)致的編程錯(cuò)誤,這種異常可以不用處理。
- java異常處理機(jī)制: Try-catch-finally, try: 監(jiān)控區(qū)域,執(zhí)行可能產(chǎn)生異常的代碼。catch: 捕獲、處理異常。finally: 善后處理,無(wú)論是否發(fā)生異常,代碼總能執(zhí)行。try{}語(yǔ)句塊中放的代碼是要檢測(cè)的java代碼,可能會(huì)拋出異常,也可能會(huì)正常執(zhí)行。catch(異常類(lèi)型){}塊是當(dāng)java運(yùn)行時(shí)系統(tǒng)接收到try塊中所拋出異常對(duì)象時(shí),會(huì)尋找能處理這一異常catch塊來(lái)進(jìn)行處理(可能有多個(gè)catch塊)。finally{}不管系統(tǒng)有沒(méi)有拋出異常都會(huì)去執(zhí)行,除了在之前執(zhí)行了System.exit(0);一般用來(lái)釋放資源。這幾部分代碼塊里面的代碼變量是不相關(guān)的,相當(dāng)于局部變量吧。
- Java里try catch的簡(jiǎn)單用法: ①try+catch: 程序的流程是:運(yùn)行到try塊中,如果有異常拋出,則轉(zhuǎn)到catch塊去處理。然后執(zhí)行catch塊后面的語(yǔ)句。②try+catch+finally: 程序的流程是:運(yùn)行到try塊中,如果有異常拋出,則轉(zhuǎn)到catch塊,catch塊執(zhí)行完畢后,執(zhí)行finally塊的代碼,再執(zhí)行finally塊后面的代碼。如果沒(méi)有異常拋出,執(zhí)行完try塊,也要去執(zhí)行finally塊的代碼。然后執(zhí)行finally塊后面的語(yǔ)句。③try+finally: 程序的流程是:運(yùn)行到try塊中,如果有異常拋出的話(huà),程序轉(zhuǎn)向執(zhí)行finally塊的代碼。那末finally塊后面的代碼還會(huì)被執(zhí)行嗎?不會(huì)!因?yàn)闆](méi)有處理異常,所以遇到異常后,執(zhí)行完finally后,方法就已拋出異常的方式退出了。
- 下面是java異常處理的示例代碼:
throw和throws:
- throw用于手動(dòng)拋出異常,作為程序員可以在任意位置手動(dòng)拋出異常。
- throws用于在方法上標(biāo)識(shí)要暴露的異常,拋出的異常交由調(diào)用者處理。
- 兩者區(qū)別: ① throw用在方法內(nèi),后面跟上要拋出的異常類(lèi)對(duì)象。throws修飾在方法上,告訴調(diào)用者此方法可能會(huì)拋出異常,后面跟上可能要拋出異常類(lèi)名。② throw:手動(dòng)拋出異常。throws:聲明方法可能要拋出異常。
- 代碼示例:
自定義異常:
- 常見(jiàn)異常:RuntimeException、IOException、SQLException、ClassNotFoundException
- 自定義異常: java提供的異常體系不可能遇見(jiàn)所有加以報(bào)告的錯(cuò)誤
- ① 自定義異常類(lèi)必須從已由的異常類(lèi)繼承。② 建立新的異常類(lèi)型最簡(jiǎn)單的方法就是讓編譯器產(chǎn)生默認(rèn)構(gòu)造方法。③ 對(duì)于異常來(lái)說(shuō),最重要的部分就是它的類(lèi)名。 ④ 可以為異常類(lèi)定義一個(gè)接受字符串參數(shù)的構(gòu)造方法,字符串參數(shù)描述異常信息。
- 下面是使用自己定義的異常類(lèi),來(lái)手動(dòng)拋出異常的代碼:
總結(jié)
以上是生活随笔為你收集整理的多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux内核驱动目录功能说明
- 下一篇: java学习(70):GUL图形用户界面