class Father {
public void a() throw Exception{}
public void b() throw Exception{}
public void c() throw java.io.IOException{}
}
class Son extends Father {
// 可以不使用throws來覆寫
public void a() {}
// 可用子類別來覆寫
public void b() throw java.io.IOException,
java.sql.SQLException{}
// 錯誤,不可用父類別來覆寫
public void c() throw Exception{}
}
##ShowAll##
2010年6月28日 星期一
JAVA筆記-覆寫例外函式
JAVA筆記-使用extends自訂例外類別
class MemberIDException extends Exception
{
public MemberIDException(String mID)
{
super("ERROR: " + mID)
}
public void contactWith() // 自訂例外中的自訂方法
{
System.out.println("Please try again.");
}
}
public static void main(String[] args)
{
try
{
checkMemberID("123456");
}
catch(MemberIDException e)
{
System.out.println(e.getMessage());
e.contactWith(); // 自訂例外類別中的自訂方法
}
}
public static void checkMemberID(String mID) throws MemberIDException
{
if(mID.length() != 5)
{
throw new MemberIDException(mID); // 自訂例外
}
}
##ShowAll##
JAVA筆記-使用throw和throws自訂觸發例外
使用方法:
(1) 丟出例外物件變數,即顯示系統錯誤訊息 => throw 例外物件變數
(2) 丟出一個例外物件 => throw new Wxception(錯誤訊息字串)
##ReadMore##
score方法為Exception所修飾,使用時必須被呼叫在try-catch內
如果呼叫score的函式有經過throws修飾,則可直接使用,不需try-catch
如:
可同時使用多個Exception子類別修飾方法
(1) 丟出例外物件變數,即顯示系統錯誤訊息 => throw 例外物件變數
(2) 丟出一個例外物件 => throw new Wxception(錯誤訊息字串)
##ReadMore##
public static void main(String[] args)
{
try
{
score(101);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
public static void score(int num) throws Exception // throws用來告知此方法有可能發生例外
{
if(num > 100)
{
throw new Exception("Over");
}
}
score方法為Exception所修飾,使用時必須被呼叫在try-catch內
如果呼叫score的函式有經過throws修飾,則可直接使用,不需try-catch
如:
public static void main(String[] args) throws Exception {
可同時使用多個Exception子類別修飾方法
public void calc() throws IOException, SQLException{
throw new IOException();
throws new Exception(); // 不可丟出更大的父類別
}
JAVA筆記-使用assert維護程式碼
AssertionError繼承Error類別
用於維護程式碼,與C語言的assert用法意義相同
意義是當產生AssertionError時,
代表程式碼可能撰寫錯誤或不完全
##ReadMore##
assert表達式
(1) assert expression1 ;
(2) assert expression1 : expression2 ;
當expression1 = true,不做動作
當expression1 = false,產生AssertionError錯誤字串
AssertionError預設為關閉,開啟方法:
(1) 編譯指令 => javac -source 1.4 XXX.java
(2) 執行指令 => java -ea XXX
關閉方法:
執行指令 => java -da XXX
用於維護程式碼,與C語言的assert用法意義相同
意義是當產生AssertionError時,
代表程式碼可能撰寫錯誤或不完全
##ReadMore##
assert表達式
(1) assert expression1 ;
(2) assert expression1 : expression2 ;
當expression1 = true,不做動作
當expression1 = false,產生AssertionError錯誤字串
AssertionError預設為關閉,開啟方法:
(1) 編譯指令 => javac -source 1.4 XXX.java
(2) 執行指令 => java -ea XXX
關閉方法:
執行指令 => java -da XXX
// 例1
assert (score >= 0) : "INPUT ERROR!" ;
if(score > 60) System.out.println("Pass.");
// 例2
while (true){;}
assert false : "IMPOSSIBLE!" ;
2010年4月16日 星期五
JAVA筆記-擷取例外的類別
Throwable
<- Error (Compiler會自己找出來)
<- Exception (由try-catch擷取例外)
Exception
<- ClassNotFoundException
<- SQLException
<- InterruptedException
<- IOException <- EOFException
<- FileNotFoundException
<- RuntimeException <- ArithmeticException(除以零)
<- NullPointerException
<- IndexOutOfBoundsException
<- IllegalStateException
<- ClassCastException
<- IllegalArgumentException
IndexOutOfBoundsException
<- NumberFormatException
IllegalStateException
<- ArrayIndexOutOfBoundsException
使用範例:
<- Error (Compiler會自己找出來)
<- Exception (由try-catch擷取例外)
Exception
<- ClassNotFoundException
<- SQLException
<- InterruptedException
<- IOException <- EOFException
<- FileNotFoundException
<- RuntimeException <- ArithmeticException(除以零)
<- NullPointerException
<- IndexOutOfBoundsException
<- IllegalStateException
<- ClassCastException
<- IllegalArgumentException
IndexOutOfBoundsException
<- NumberFormatException
IllegalStateException
<- ArrayIndexOutOfBoundsException
使用範例:
try {
// 可能發生例外的程式碼
}
catch (ArithmeticException e){
// 發生例外時處理的程式碼
}
2010年3月24日 星期三
JAVA筆記-try-catch-finally 例外處理機制
若沒有設置例外處理機制,當錯誤發生時,
函式會層層往上反應到JVM,而結束程式
若有設置例外處理機制,當錯誤發生時,
程式可以有相對應的處理
try區段後必須至少接一個catch區段或finally區段
可用e.printStackTrace(System.out);來配合使用
finally是總是執行的程式碼,就算在try-catch內有return也會執行
如果不想讓它執行,finally前使用System.exit(1);
函式會層層往上反應到JVM,而結束程式
若有設置例外處理機制,當錯誤發生時,
程式可以有相對應的處理
try區段後必須至少接一個catch區段或finally區段
可用e.printStackTrace(System.out);來配合使用
finally是總是執行的程式碼,就算在try-catch內有return也會執行
如果不想讓它執行,finally前使用System.exit(1);
try
{
/* 可能發生例外的程式碼 */
}
catch(ArithmeticException e)
{
/* 發生例外時處理的程式碼 */
System.out.println(e.getMessage()); //顯示錯誤原因
}
//有直系關係的exception類別要放在後面
catch(RuntimeException e)
{
/* 發生例外時處理的程式碼 */
e.printStackTrace(System.out); //顯示詳細錯誤原因
}
finally
{
/* 總是執行的程式碼 */
}
2009年9月19日 星期六
C/C++筆記-assert防止陣列索引溢出
/* 叫用#include <assert.h> 來檢查有無超過範圍 */
int primes[] = {2,3,5,7,11,13,17};
int index = 10;
assert(index < (sizeof(primes)/sizeof(primes[0])));
assert(index >= 0);
std::cout << primes[index] ;
/* 用起來其實很累人,但一些大型source code,會看到在用 */
##ShowAll##
訂閱:
文章
(
Atom
)