Throwable|--Error //嚴重的問題,如:運行的類不存在或者內存溢出等。對於Error一般不編寫針對性的代碼對其進行處理。|--Exception //非嚴重的問題。對於Exception可以使用針對性的處理方式進行處理。|--RuntimeException //特殊異常類。如果在函數內拋出該異常,函數上可以不用聲明。如果在函數上聲明瞭該異常,調用者可以不用進行處理。
異常體系的特點:異常體系中的所有類以及建立的對象都具備可拋性。也就是說可以被throw和throws關鍵字所操作。可拋性是Throwable這個體系中的獨有特點。
throw:定義在函數內,用於拋出異常對象。
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:SimSun;font-size:14px;">class Demo
{
int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通過throws關鍵字生命了該功能有可能會出問題。
{
int[] arr = new int[a];
System.out.println(arr[4]);
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x = d.div(4,0);
System.out.println("x="+x);
}
catch (ArithmeticException e)
{
System.out.println(e.toString());
System.out.println("除數爲0啦!");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("角標越界");
System.out.println(e.toString());
}
catch (Exception e)//Exception e = new ArithmeticException();
{
System.out.println(e.getMessage());// / by zero
System.out.println(e.toString());// 異常名稱:異常信息
e.printStackTrace();//異常名稱,異常信息,異常出現位置
//其實jvm默認的異常處理機制,就是在調用printStackTrace方法。
//打印異常的堆棧的跟蹤信息。
}
}
}</span></span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:SimSun;font-size:14px;">class FuShuException extends Exception
{
private int value;
FuShuException(String msg,int value)
{
super(msg);
this.value = value;
}
public int getValue()
{
return value;
}
}
class Demo
{
int div(int a,int b)throws FuShuException
{
if(b<0)
throw new FuShuException("除數出現負數了------",b);//手動通過throw關鍵字拋出一個自定義異常對象。
return a/b;
}
}
class ExceptionDemo1
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x = d.div(4,-9);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
System.out.println("負數是"+e.getValue());
}
}
}</span></span>
2、調用到拋出異常的功能時,拋出幾個,就處理幾個。一個try對應多個catch。
3、多個catch時,父類的catch放到最下面。否則編譯會報錯,因爲其餘的catch語句執行不到。
b.如果父類方法拋出多個異常,那麼子類在覆蓋方法時,只能拋出父類異常的子集。
c.如果父類或者接口的方法中沒有異常拋出,那麼子類在覆蓋方法時,也不可以拋出異常。
給類提供多層命名空間 。
包必須寫在程序的第一行。
類的全稱:包名.類名。
不同包中的子類還可以直接訪問父類中被protected權限修飾的成員。
包與包之間可以使用的權限只有兩種,public protected
public protected default private
同一個類中 ok ok ok ok
同一個包中 ok ok ok
子類 ok ok