異常:
1.異常時什麼? 是對問題的描述。將問題進行對象封裝。
異常體系
Throwable
|–Error
|–Exception
|–RunTimeException
異常體系的特點;異常體系中的所有類以及建立的對象都具有可拋性
也就是說可以被throw和throws關鍵字所操作
只有異常體系具備這個特點。
異常處理語句:
1. try
{
需要被檢測的代碼
}
finally
{
}
2.
try
{
需要被檢測的的代碼
}
catch()
{
處理異常的代碼
}
finally finally表示關閉代碼資源,因爲資源要釋放
{
一定會執行的代碼
}
3.
try
{}
finally
{}
throw定義在函數內,用於拋出異常對象。
throws定義在函數上,用於拋出異常類,要也可以拋出多個用逗號隔開。
當函數內容有throw拋出異常對象,並未進行try處理。需要在函數上聲明
注意RuntimeException除外。也就是說,函數內如果拋出的RunTimeException異常,函數上可以不用聲明
如果函數聲明瞭異常,調用者需要進行處理。處理方法可以調和throws,可以try
異常的好處:
1.將問題進行封裝。
2.將正常流程代碼和問題處理代碼相分離,方便與閱讀。
處理的原則
1.處理的方式有兩種:try 或着throws
2.調用到拋出類型異常的功能時,拋出幾個就處理幾個,一個try對應多個catch
3.多個catch,父類的catch放到最下面。
4.catch內,需要定義正對性的處理方式,不要簡單的定義printStakTrace 輸出語句。
也不要不寫。
當捕獲到的異常,本功能處理不了的,可以在繼續拋出。
編譯時異常: 程序正確,但因爲外在的環境條件不滿足引發。例如:用戶錯誤及I/O問題—-
程序試圖打開一個並不存在的遠程Socket端口。這不是程序本身的邏輯錯誤,而很可能是遠程機器名字
錯誤(用戶拼寫錯誤)。對商用軟件系統,程序開發者必須考慮並處理這個問題。Java編譯
器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。
運行期異常: 這意味着程序存在bug,如數組越界,0被除,入參不滿足規範…..
這類異常需要更改程序來避免,Java編譯器強制要求處理這類異常。
自定義異常實例
/*
要求:當除數是負數時拋出異常
1*/
class NegtiveException2 extends Exception //繼承異常類Exception或者他的子類
{
NegtiveException2(String msg){
super(msg);
}
}
class Demo2
{
int div(int a, int b) throws NegtiveException2 //定義除法方法
{
if (b<=0)
throw new NegtiveException2("除數是負數");
return a/b;
}
}
public class ExceptionDemo
{
public static void main(String[] args)
{
Demo2 d = new Demo2();
try
{
int x = d.div(4,1);
System.out.println("x="+x);
}
catch (NegtiveException2 e)
{
System.out.println(e.toString());
}
finally
{
System.out.println("finally");
}
System.out.println("end");
}
}