文章目錄
- setStackTrace
- printStackTrace
- fillInStackTrace
- getStackTrace
java的異常處理提供語言級對執行階段錯誤的處理機制。異常處理機制包括異常類體系,異常處理的try 語句。拋出自訂異常對象的throw語句,聲明方法拋出異常的throws子句。這些功能使得程式不僅能夠捕獲並處理異常,還能夠主動拋出異常,也能夠將異常向調用傳遞。
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
RuntimeException 是那些可能在 JAVA 虛擬機器正常運行期間拋出的異常的超類。
可能在執行方法期間拋出但未被捕獲的 RuntimeException 的任何子類都無需在 throws 子句中進行聲明。
Throwable 類是 Java 語言中所有錯誤或異常的超類。只有當對象是此類(或其子類之一)的執行個體時,才能通過 JAVA 虛擬機器或者 Java throw 語句拋出。類似地,只有此類或其子類之一才可以是 catch 子句中的參數類型。
兩個子類的執行個體,Error 和 Exception,通常用於指示發生了異常情況。通常,這些執行個體是在異常情況的上下文中新近建立的,因此包含了相關的資訊(比如堆疊追蹤資料)。
=============================================================================================
setStackTrace
public void setStackTrace(StackTraceElement[] stackTrace)
-
設定將由
getStackTrace() 返回,並由
printStackTrace() 和相關方法輸出的堆疊追蹤元素。 此方法設計用於 RPC 架構和其他進階系統,允許用戶端重寫預設堆疊追蹤,這些預設堆疊追蹤要麼在構造 throwable 時由
fillInStackTrace() 產生,要麼在從序列化流讀取 throwable 時還原序列化。
-
-
參數:
-
stackTrace - 要與此
Throwable 關聯的堆疊追蹤元素。指定的數組由此調用複製;在方法調用返回後,指定數組中的改變將不會對此
Throwable 的堆疊追蹤產生影響。
printStackTrace
public void printStackTrace(PrintWriter s)
-
將此 throwable 及其追蹤輸出到指定的 PrintWriter。
-
-
參數:
-
s - 用於輸出的
PrintWriter
fillInStackTracepublic Throwable fillInStackTrace()
-
在異常堆疊追蹤中填充。此方法在
Throwable 對象資訊中記錄有關當前線程堆疊框架的目前狀態。
-
-
-
返回:
-
對此
Throwable 執行個體的引用。
getStackTracepublic StackTraceElement[] getStackTrace()
-
提供編程訪問由
printStackTrace() 輸出的堆疊追蹤資訊。返回堆疊追蹤元素的數組,每個元素表示一個堆疊框架。數組的第零個元素(假定資料的長度為非零)表示堆棧頂部,它是序列中最後的方法調用。通常,這是建立和拋出該 throwable 的地方。數組的最後元素(假定資料的長度為非零)表示堆棧底部,它是序列中第一個方法調用。
某些虛擬機器在某些情況下可能會從堆疊追蹤中省略一個或多個堆疊框架。在極端情況下,沒有該 throwable 堆疊追蹤資訊的虛擬機器可以從該方法返回一個零長度數組。一般說來,由此方法返回的數組將包含由 printStackTrace 輸出的每幀的一個元素。
-
-
-
返回:
-
堆疊追蹤元素的數組,表示與此 throwable 相關的堆疊追蹤。
===============================================================================================
啟動並執行異常都是RuntimeException的子類,說明如下:
1。算術異常:ArithmeticException
2。Null 物件異常:NullPointException
3。類型強制轉換異常:ClassCastException
4.負數組長度異常NegativeArraySizeException
5.數組下標越界異常:ArrayIndexOutOfBoundsException
6.數值格式異常:NumberFormatException
一個異常對象經曆拋出,捕獲及處理過程。建立一個異常類對象的過程稱為 拋出(throw)異常,獲得異常對象的過程稱為捕獲(catch)異常;對異常對象執行相應操作的過程稱為處理異常,異常對象由捕獲它的語句進行處理。通常,這幾個過程分別由不同方法或java虛擬機器完成。
=======================================================================================
package Exception;
public class ArrayAverage2 {
public static double average(int table[])
{
if(table!=null&&table.length!=0)
{
double sum=0;
for(int i=0;i<table.length;i++)
sum+=table[i];
return sum/table.length;
}
return 0.0;
}
public static double average(int table1[],int table2[])
{
int count=0;
if(table1!=null&&table1.length!=0)
count=table1.length;
if(table2!=null&&table2.length!=0)
count+=table2.length;
if(count!=0)
return (average(table1)*table1.length+average(table2)*table2.length)/count;
else
return 0.0;
}
public static int[] tointArray(String str[])
{
if(str!=null&&str.length!=0)
{
int temp[]=new int[str.length];
int count=0;
for(int i=0;i<str.length;i++)
try
{
temp[count]=Integer.parseInt(str[i]);
count++;
}
catch(NumberFormatException e)
{
System.out.println("字串"+str[i]+"不能轉換為整數,產生的異常類是"+e.getClass().getName());
}
int table[]=new int[count];
System.arraycopy(temp, 0, table, 0, count); //複製數組
return table;
}
return null;
}
public static void print(int table[])
{
if(table!=null)
{
System.out.print("數組元素為:");
for(int i=0;i<table.length;i++)
System.out.print(" "+table[i]);
System.out.println();
}
}
public static void main(String[] args) {
int x[]={1,2,3,4};
int y[]={};
System.out.println("average(x,y)="+average(x,y));
y=tointArray(args);
print(y);
System.out.println("average(y)="+average(y));
}
}
========================================================================================
package Exception;
public class IllegalAgeException extends Exception{
public IllegalAgeException(String s)
{
super(s);
}
public IllegalAgeException()
{
this("");
}
}
package Exception;
public class Person3 {
protected String name;
protected int age;
public Person3(String name,int age) throws IllegalAgeException
{
this.set(name);
this.set(age);
}
public void set(int age) throws IllegalAgeException
{
if(age>=0&&age<=100)
this.age=age;
else
throw new IllegalAgeException(""+age);
}
public void set(String name)
{
if(name!=null||name!="")
this.name=name;
else
this.name="名字不知道";
}
public void print()
{
System.out.println(this.toString());
}
public static void main(String[] args) {
Person3 p1=null;
try
{
p1=new Person3("李小名",20);
//調用聲明拋出異常方法,必須寫在 try 語句中,否則編譯不通過
p1.set(120);
}
catch(IllegalAgeException e) //捕獲自訂異常類,而非Exception類
{
e.printStackTrace(); //顯示異常餞跟蹤資訊
}
finally
{
p1.print(); // 顯示對象資訊
}
}
}