r = new Robet();r.run();
Robet.Heart h = r.new Heart();
h.run();
匿名內(nèi)部類(lèi)*
構(gòu)造函數(shù)參數(shù)傳入時(shí),直接生成一個(gè)實(shí)現(xiàn)IA接口的匿名內(nèi)部類(lèi)的對(duì)象。調(diào)用run方法時(shí),多態(tài)會(huì)找到這個(gè)不知道叫什么名字的類(lèi)的覆蓋方法。實(shí)現(xiàn)接口或者類(lèi)1在new后面使用,隱含著實(shí)現(xiàn)接口或者類(lèi),父類(lèi)類(lèi)型。2 其他遵循局部?jī)?nèi)部類(lèi)的規(guī)則3無(wú)構(gòu)造函數(shù)。無(wú)名嘛===============================================Exceptionjava.lang.Throwable是java.lang.Error和java.lang.Exception的父類(lèi)。java.lang.Error是指底層的,低級(jí)的,嚴(yán)重的,不可恢復(fù)的錯(cuò)誤,例如內(nèi)存不足等。程序一定會(huì)退出。java.lang.Exception是程序員關(guān)注的重點(diǎn),例外又分為RunTime Exception未檢查例外和已檢查例外。未檢查例外是由于程序的大意,沒(méi)有相應(yīng)的檢查,而出的例外。此類(lèi)異常是可以避免的。此類(lèi)問(wèn)題應(yīng)提前提供應(yīng)對(duì)策略,是可能出現(xiàn)的錯(cuò)誤提前應(yīng)對(duì)。例如除0,數(shù)組越界,強(qiáng)制類(lèi)型轉(zhuǎn)換錯(cuò)誤ClassCastException,等。java.lang.RuntimeException的子類(lèi)都是未檢查錯(cuò)誤,去查API。所以是編程避免。已檢查例外是需要程序處理的。兩種方式:1.方法throws Exception 2.try{...}catch(Exception ex){...}finally{...}第一種是一種消極的處理方式,第二種是一種積極的處理方式。如果不處理,程序非正常退出,影響出現(xiàn)其他代碼正常運(yùn)行,盡管他們沒(méi)有關(guān)系。Java是在網(wǎng)絡(luò)上傳輸字節(jié)碼。所以不會(huì)讓程序中出現(xiàn)永遠(yuǎn)運(yùn)行不到的語(yǔ)句,就是不能有廢話(huà)。不能存在unreachable statement。
應(yīng)用try...catch...finally處理異常,保證程序正常退出。
catch可以有多個(gè),但一個(gè)異常只能匹配一個(gè),而且catch的Exception從上到下,是子類(lèi)到父類(lèi)的順序,不可顛倒。try塊中,有語(yǔ)句可能運(yùn)行不到,finally無(wú)論如何都會(huì)被執(zhí)行,即使catch塊中有return語(yǔ)句,除非有System.exit(0);不會(huì)走finally塊。finally塊中,主要放置釋放資源,斷開(kāi)網(wǎng)絡(luò)連接的代碼。
一定要執(zhí)行finally塊語(yǔ)句,所以傳入?yún)?shù)為2時(shí),try計(jì)算完1,不能馬上執(zhí)行return,而是執(zhí)行finally,最后執(zhí)行finally塊中的return。ex.getMessage() ------>Exception(String message),注意需要構(gòu)造對(duì)象時(shí)采用有參構(gòu)造方法ex.printStackTrace(),打印堆棧信息,最早出現(xiàn)位置,途經(jīng)哪個(gè)方法。開(kāi)發(fā)一般規(guī)律:1.try范圍控制確定寫(xiě)程序,聯(lián)動(dòng)操作,如果第一件事與第二件事無(wú)關(guān),不要放置于同一個(gè)try塊中。如果第一件事影響到第二件事,放在一起。2.try...catch,這種積極的處理方式,放置于最有能力處理的地方,否則采用throws方式,將例外拋給調(diào)用者。聯(lián)想:一個(gè)人要辦一件事,他需要一個(gè)中介來(lái)辦理,那么他將材料給了代理人,代理將材料提交給執(zhí)行機(jī)構(gòu),辦理過(guò)程中,執(zhí)行機(jī)構(gòu)發(fā)現(xiàn)材料不全,告知代理人,代理是沒(méi)有能力來(lái)處理這件事的,只得再告知辦理人,由辦理人再行辦理。自定義例外class MyException extends Exception{ public MyException(String message) { super(message); }}
==>throw new MyException("");覆蓋方法時(shí),覆蓋方法的例外拋出類(lèi)型和數(shù)量有限制,類(lèi)型相等,或者是被覆蓋方法例外類(lèi)型的字類(lèi)型,數(shù)量只能更少。try必須和catch或者finally配套出現(xiàn)。任何代碼塊中都可以再次嵌套try...catch...finally。