一、接口
1、接口定義
接口是一系列方法的聲明,是一些抽象的集合;
接口只有抽象方法沒有方法的實現,且默認就是public權限;
接口並不是類,編寫接口的方式和類很相似,但是它們屬於不同的概念;
類描述對象的屬性和方法,接口則包含類要實現的方法;
接口就是特殊的抽象類,即所有方法都是抽象方法的抽象類就是Java中的接口(interface);
接口無法被實例化,但是可以被實現。
2、接口的基本格式
【修飾符】interface 接口名 【extends 父接口名列表】
【public】【static】【final】常量;
【public】【abstract】方法;
接口名必選參數,用於指定接口的名稱,接口名必須是合法的Java標識符。一般情況下,要求首字母大寫;
接口中沒有變量,只能有public static final修飾的靜態常量。三個修飾符可以省略;
二、類接口的實現
1、特點
類最多只能繼承一個類,即單繼承,而一個類卻可以同時實現多個接口,實現類需要覆蓋所有接口中的所有抽象方法,否則該類也必須聲明為抽象類。
接口是抽象的,接口中沒有任何具體方法和變量,所以接口不能進行實例化;
類使用implements關鍵字實現接口。在類聲明中,Implements關鍵字放在class聲明后面。
2、實現接口的基本格式
[修飾符] class <類名> [extends 父類名] [implements 接口列表]{ }
implements 接口列表:可選參數,用於指定該類實現的是哪些接口。當使用implements關鍵字時,接口列表為必選參數。當接口列表中存在多個接口名時,各個接口名之間使用逗號分隔。
3、重寫接口中聲明的方法時,需要注意以下規則:
- 類在實現接口的方法時,不能拋出強制性異常,只能在接口中,或者繼承接口的抽象類中拋出該強制性異常。
- 類在重寫方法時要保持一致的方法名,並且應該保持相同或者相兼容的返回值類型。
- 如果實現接口的類是抽象類,那么就沒必要實現該接口的方法。
4、在實現接口的時候,也要注意一些規則:
- 一個類可以同時實現多個接口。
- 一個類只能繼承一個類(單繼承),但是能實現多個接口(多重繼承)。
- 一個接口能繼承另一個接口,這和類之間的繼承比較相似使用關鍵字extends,不要錯用成implements。
例如: Interface3 extends ,Interface0, Interface1, interface……
三、接口與抽象類的區別
對比圖:
Abstract class |
Interface |
|
屬性 |
不用限制 |
靜態常量 |
構造方法 |
可有可無 |
沒有 |
普通方法 |
可以有具體方法 |
必須是抽象方法 |
子類 |
單一繼承 |
多重實現 |
1、抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行;
2、 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的;
3、接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法;
4、一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
四、面向接口編程
1、接口是設計層面的概念,往往由設計師設計,將定義與實現分離
程序員實現接口,實現具體方法
常見的類設計結構:
接口
子接口 抽象類
具體類
2、面向接口編程
面向接口編程和面向對象編程並不是平級的,它並不是比面向對象編程更先進的一種獨立的編程思想,而是附屬於面向對象思想體系,屬於其一部分;
或者說,它是面向對象編程體系中的思想精髓之一;
面向接口編程的意思是指在面向對象的系統中所有的類或者模塊之間的交互是由接口完成的。
總結:
1.接口可以多繼承
2.接口的方法聲明必須是 public abstract 即便不寫默認也是
3.接口里面不能包含方法具體實現
4.類實繼承接口必須實現接口里申明的全部方法,除非該類是抽象類
5.類里面可以聲明 public static final 修飾的變量
6.接口不能被實例化,但是可以被實現類創建
五、異常處理
1、異常概念
異常是不正常的事件,不是錯誤;
異常是指程序運行的過程中,發生某些意外的事情,比如10除以0, 文件不存在等
2、錯誤
錯誤是很難處理的,比如內存溢出等,不能夠通過異常處理機制來解決;
異常是程序中發生的不正常事件流,通過處理程序依然可以運行下去。但是錯誤是無法控制的,程序肯定要中斷.
3、異常體系
Throwable類有兩個直接子類:Exception類、Error類。
Error表示錯誤,可能是編譯期錯誤或者系統錯誤,往往程序中並不處理。
Exception表示異常,是所有異常類的父類,是程序員所關心的。
4、異常種類
異常分為運行期異常和編譯期異常兩種
運行期異常:程序運行時拋除的異常,所有RuntimeException的子類都是運行期異常
-數學異常
-空指針異常
-數組下標越界
-................
編譯期異常(Checked Exception):除去運行期的異常都是編譯期異常,也稱為檢測異常
-IOException
-SQLException
-...............
六、捕獲異常
1、使用 try 和 catch 關鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發生的地方。
try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的語法如下:
try{
可能會發生異常的代碼
}catch(異常類型 引用名){
異常處理代碼
}finally{
必須執行代碼
}
運行流程(無異常情況)
try{
System.out.println("try");
}catch(Exception e) {
System.out.println("Exception");
} finally{
System.out.println("Finally");
}
運行流程(有異常情況)
try{
String demo = null; demo.split("a");
System.out.println("try");
}catch(Exception e) {
System.out.println("Exception");
e.printStackTrace();
} finally{
System.out.println("Finally");
}
2、finally與return
在try中沒有異常的情況下try、catch、finally的執行順序 try --- finally;
如果try中有異常,執行順序是try --- catch --- finally;
如果try中沒有異常並且try中有return這時候正常執行順序是try ---- finally --- return;
如果try中有異常並且try中有return這時候正常執行順序是try----catch---finally--- return;
如果try有異常,相應catch中有return,順序是try---catch---finally---return。
七、拋出異常
throw關鍵字
1、 --關鍵字throw用於顯式拋出異常
--拋除異常后處理
--使用try-catch捕獲異常
--使用throws聲明異常
語法
throw new 異常類構造方法;
例如:throw new Exception();
2、用於方法聲明處,指出方法引發的異常。
可以聲明多種異常類型,用逗號分開即可。
示例 public void test throws 異常1,異常2,異常3{ }
3、層層拋出異常
catch語句中,處理異常后,再次用throw拋出該異常對象
繼續拋出異常的作用:使得調用該方法的方法,能夠再一次捕獲並處理異常
4、總結
--throw用於方法體中,用來拋出一個實際的異常對象,使用throw后,要么使用try catch捕獲異常,要么使用throws聲明異常;
--throws用於方法聲明處,用來聲明該方法可能發生的異常類型,可以是多個異常類型,用來強制調用該方法時處理這些異常;
--抽象方法也可以使用throws,所以說並不是有throw才有throws;
--如果使用throw關鍵字拋異常,一定不要使用Exception,不能很好標記異常類型;
--如果throw要拋出與業務邏輯有關的異常,需要使用自定義異常類,后續學習。
八、自定義異常
1、自定義異常就是自己定義的異常類,也就是API中的標准異常類的直接或間接的子類
作用:用自定義異常標記業務邏輯的異常,避免與標准異常混淆
基本語法 public class 異常類名 extends Exception{
public 異常類名(String msg){
super(msg);
}
}
自定義異常類中往往不寫其他方法,只重載需要使用的構造方法。
2、在程序中使用自定義異常大致可以分為以下幾步
--創建自定義異常類;
--在方法中通過throw 關鍵字拋出自定義異常;
--如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲並處理,否則在方法的聲明處通過throws關鍵字聲明該異常;
--調用throws聲明該異常的方法時,使用try catch捕獲自定義的異常類型,並在catch中進行處理。