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