------- android教育訓練、java教育訓練、期待與您交流! ----------
1:什麼是異常:
是對問題的描述。将問題進行對象的封裝。
------------
2:異常體系:
Throwable
|--Error
|--Exception
|--RuntimeException
------------
:3:異常體系的特點:異常體系中的所有類以及建立的對象都具備可抛性。也就是說可以被throw和throws關鍵字所操作。隻有異常體系具備這個特點。
------------
4:throw和throws的用法:
throw定義在函數内,用于抛出異常對象。
throws定義在函數上,用于抛出異常類,可以抛出多個用逗号隔開。
當函數内容有throw抛出異常對象,并未進行try處理。必須要在函數上聲明,都在編譯失敗。RuntimeException除外。函數内如果抛出的RuntimeExcpetion異常,函數上可以不用聲明。
--------------
5如果函數聲明了異常,調用者需要進行處理。處理方法可以throws也可以try。
異常有兩種:
編譯時被檢測異常
該異常在編譯時,如果沒有處理(沒有抛也沒有try),編譯失敗。
該異常被辨別,代表這可以被處理。
運作時異常(編譯時不檢測)
在編譯時,不需要處理,編譯器不檢查。
該異常的發生,建議不處理,讓程式停止。需要對代碼進行修正。
------------
6:異常常用的處理語句:
<span style="font-size:18px;">try
{
需要被檢測的代碼;
}
catch ()
{
處理異常的代碼;
}
finally
{
一定會執行的代碼;
}
</span>
1,finally中定義的通常是 關閉資源代碼。因為資源必須釋放。
2,finally隻有一種情況不會執行。當執行到System.exit(0);fianlly不會執行。
------------
7:異常的處理原則:
1,處理方式有兩種:try 或者 throws。
2,調用到抛出異常的功能時,抛出幾個,就處理幾個。
一個try對應多個catch。
3,多個catch,父類的catch放到最下面。
4,catch内,需要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。
也不要不寫。
當捕獲到的異常,本功能處理不了時,可以繼續在catch中抛出。
try
{
throw new AException();
}
catch (AException e)
{
throw e;
}
如果該異常處理不了,但并不屬于該功能出現的異常。
可以将異常轉換後,在抛出和該功能相關的異常。
或者異常可以處理,當需要将異常産生的和本功能相關的問題提供出去,
當調用者知道。并處理。也可以将捕獲異常處理後,轉換新的異常。
try
{
throw new AException();
}
catch (AException e)
{
// 對AException處理。
throw new BException();
}
異常的注意事項:
在子父類覆寫時:
1,子類抛出的異常必須是父類的異常的子類或者子集。
2,如果父類或者接口沒有異常抛出時,子類覆寫出現異常,隻能try不能抛。
-------------
8:自定義異常
1、定義一個類繼承Throwable或其子類。
2、添加構造方法(當然也可以不用添加,使用預設構造方法)。
3、在某個方法類抛出該異常。
4、捕捉該異常。
// 自定義異常執行個體
public class MyException extends Exception{
public MyException(){
}
public MyException(String message){
super(message);
}
}
public class Test {
public void display(int i) throws MyException{
if(i == 0){
throw new MyException("該值不能為0.......");
}
else{
System.out.println( i / 2);
}
}
public static void main(String[] args) {
Test test = new Test();
try {
test.display(0);
System.out.println("---------------------");
} catch (MyException e) {
e.printStackTrace();
}
}
}
------------
參考示例
/*
老師用電腦上課。
開始思考上課中出現的問題。
比如問題是
電腦藍屏。
電腦冒煙。
要對問題進行描述,封裝成對象。
可是當冒煙發生後,出現講課進度無法繼續。
出現了講師的問題:課時計劃無法完成。
*/
class LanPingException extends Exception
{
LanPingException(String message)
{
super(message);
}
}
class MaoYanException extends Exception
{
MaoYanException(String message)
{
super(message);
}
}
class NoPlanException extends Exception
{
NoPlanException(String msg)
{
super(msg);
}
}
class Computer
{
private int state = 3;
public void run()throws LanPingException,MaoYanException
{
if(state==2)
throw new LanPingException("藍屏了");
if(state==3)
throw new MaoYanException("冒煙了");
System.out.println("電腦運作");
}
public void reset()
{
state = 1;
System.out.println("電腦重新開機");
}
}
class Teacher
{
private String name;
private Computer cmpt;
Teacher(String name)
{
this.name = name;
cmpt = new Computer();
}
public void prelect()throws NoPlanException
{
try
{
cmpt.run();
}
catch (LanPingException e)
{
cmpt.reset();
}
catch (MaoYanException e)
{
test();
throw new NoPlanException("課時無法繼續"+e.getMessage());
}
System.out.println("講課");
}
public void test()
{
System.out.println("練習");
}
}
class ExceptionTest
{
public static void main(String[] args)
{
Teacher t = new Teacher("畢老師");
try
{
t.prelect();
}
catch (NoPlanException e)
{
System.out.println(e.toString());
System.out.println("換老師或者放假");
}
}
}