015_面向对象_异常,包和Object类
1.異常(http://blog.csdn.net/hguisu/article/details/6155636)
(1)異常的定義
異常是指在運(yùn)行期間發(fā)生的不正常情況,java中用類的形式對(duì)不正常情況進(jìn)行了描述和封裝,稱為異常類。不同的問題用不同的類進(jìn)行具體的描述。
問題很多,描述的類也很多,將其共性進(jìn)行向上抽取,形成了異常體系。
?
(2)異常的體系
?、貳rror(程序不可處理的)
?是由jvm拋出的嚴(yán)重性問題,這種問題發(fā)生一般不針對(duì)性處理,直接修改程序。
?、贓xception(程序可以處理的)
?
(3)Exception的分類
?、倬幾g時(shí)異常:Exception中除了子類RuntimeException的異常體系。
這種問題一旦出現(xiàn),希望在編譯時(shí)就進(jìn)行檢測(cè),讓這種問題有對(duì)應(yīng)的處理方式,都可以針對(duì)性的處理
②運(yùn)行時(shí)異常:Exception中的RuntimeException體系。
這些異常一般是由程序邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。
運(yùn)行時(shí)異常的特點(diǎn)是Java編譯器不會(huì)檢查它,當(dāng)程序中可能出現(xiàn)這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會(huì)編譯通過。
?
(4)throw和throws的區(qū)別
?、賢hrows使用在方法上,throw使用在函數(shù)內(nèi)
②throws拋出的是異常類,可以拋出多個(gè),用逗號(hào)隔開,throw拋出的是異常對(duì)象。
?
(5)異常處理的機(jī)制
?、?strong>拋出異常:當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對(duì)象并交付運(yùn)行時(shí)系統(tǒng),異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。
?、?strong>捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器。潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的
? ?異常類型相符時(shí),即為合適 的異常處理器。運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未
? ?找到合適 的異常處理器,則運(yùn)行時(shí)系統(tǒng)終止。同時(shí),意味著Java程序的終止。
具體格式是:
try
{
//需要被檢測(cè)異常的diamond
}
catch(異常類1 變量)//該變量用于接受發(fā)生的異常
{
//處理異常的代碼
}
catch(異常類2 變量)//該變量用于接受發(fā)生的異常
{
//處理異常的代碼
}
finally
{
//無論是否捕獲或處理異常,一定會(huì)被執(zhí)行的代碼,當(dāng)在try塊或catch塊中遇到return語句時(shí),finally語句塊將在方法返回之前被執(zhí)行。
}
? ?
(6)異常處理的原則
①函數(shù)內(nèi)容如果拋出需要檢測(cè)的異常,那么函數(shù)上必須要聲明。否則必須在函數(shù)內(nèi)用try catch捕捉,否則編譯失敗
?、谌绻{(diào)用到了聲明異常的函數(shù),要么try catch要么throws,否則編譯失敗
?、凼裁磿r(shí)候catch,什么時(shí)候throws呢?
功能內(nèi)容可以解決,用catch
解決不了,用throws告訴調(diào)用者,由調(diào)用者解決
④一個(gè)功能如果拋出了多個(gè)異常,那么調(diào)用時(shí),必須有對(duì)應(yīng)的多個(gè)catch進(jìn)行
針對(duì)性處理。內(nèi)部有幾個(gè)需要檢測(cè)的異常,就拋幾個(gè)異常,拋出幾個(gè),就catch幾個(gè)。
?
(7)異常的注意事項(xiàng)
①子類在覆蓋父類方法時(shí),父類的方法如果拋出了異常
那么子類的方法只能拋出父類的異?;蛘咴摦惓5母割?/p>
?、谌绻割悞伋龆鄠€(gè)異常,那么子類只能拋出父類異常的子集
簡(jiǎn)單說,子類覆蓋父類只能拋出父類的異?;蛘咦宇惢蛘咦蛹?/p>
?、廴绻割惖姆椒]有拋出異常,那么子類覆蓋時(shí)絕對(duì)不能拋,就只能try。
?、芏郼atch時(shí),父類的catch放在最下面。
class LanPingException extends Exception {LanPingException(String msg){super(msg);} }class MaoYanException extends Exception {MaoYanException(String msg){super(msg);} }class NoPlanException extends Exception {NoPlanException(String msg){super(msg);} }class Computer {private int state=1;public void run() throws LanPingException,MaoYanException{if(state==1){throw new LanPingException("電腦藍(lán)屏啦!");}else if(state==2){throw new MaoYanException("電腦冒煙啦!");}}public void reset(){System.out.println("電腦重啟");state=0;} }class Teacher {private String name;private Computer computer;Teacher(String name){this.name=name;computer=new Computer();}public void prelect()throws NoPlanException{try{computer.run();System.out.println(name+"講課");}catch(LanPingException e){System.out.println(e.toString());computer.reset();prelect();}catch(MaoYanException e){System.out.println(e.toString());test();throw new NoPlanException("課時(shí)進(jìn)度無法完成,原因:"+e.getMessage());}}public void test(){System.out.println("電腦壞了,同學(xué)們自習(xí)!");} }class ExceptionDemo {public static void main(String[] args){Teacher t=new Teacher("李老師");try{t.prelect();}catch(NoPlanException e){System.out.println(e.toString()+"......");System.out.println("換人");}} }2.包
(1)對(duì)類文件進(jìn)行分類管理,給類提供多層命名(名稱)空間。
?
(2)包與包之間的類進(jìn)行訪問,被訪問的包中的類必須是public的,被訪問的包中的類的方法也必須是public。
public protected default(默認(rèn)) private
同一類中 ok ok ok ok
同一包中 ? ok ? ok ok
子類中 ??? ?ok? ok
不同包中 ??ok
?
(3)導(dǎo)包原則:用到哪個(gè)類,就導(dǎo)入哪個(gè)類,一般不建議直接導(dǎo)包。? ? ?import 包名.*; //導(dǎo)入包中的所有的類。
(4)jar包:將寫好的一些類進(jìn)行打包,再把這些jar包引入你的項(xiàng)目中,然后就可以直接使用這些jar包中的類和屬性了,jar包一般都會(huì)放在lib目錄下。
3.Object類
(1)Object類是不斷抽取而來的,具備所有對(duì)象都具備的共性內(nèi)容。
(2)equals方法
①對(duì)于任何非空的參考值x和y ,當(dāng)且僅當(dāng)x和y引用相同的對(duì)象( x == y具有值true )時(shí),該方法返回true 。
?、谝话愣紩?huì)覆蓋equals方法,根據(jù)對(duì)象的特有內(nèi)容,建立判斷對(duì)象是否相同的依據(jù)。
(3)hashCode方法
返回對(duì)象的哈希碼值,如果equals方法沒有被覆蓋,每次返回的值應(yīng)相同。
(4)getClass方法
獲取當(dāng)前對(duì)象的字節(jié)碼文件對(duì)象。
(5)toString方法
返回該對(duì)象的字符串表示。如果沒有重寫toString方法,那么輸出來的默認(rèn)的字符串內(nèi)容是“類名+哈希編碼”。
?
轉(zhuǎn)載于:https://www.cnblogs.com/lydbky/p/8305902.html
總結(jié)
以上是生活随笔為你收集整理的015_面向对象_异常,包和Object类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot logback配
- 下一篇: Nginx 实现AJAX跨域请求