Exception異常處理
阿新 • • 發佈:2019-01-03
要養成一個好習慣,在最後一個catch上去捕獲最大的Exception,以防止程式出現一個未捕獲的異常導 致程式退出。還要注意的是,若捕獲的異常中有父子類關係的,一定是子類異常在上,父類異常在下。
例1:
package day03;
/**
* java異常捕獲機制中的try-catch
* @author Administrator
*
*/
public class ExceptionDemo1 {
public static void main(String[] args) {
System.out.println("程式開始了");
try {
String str = "a";
System.out.println(str.length());
System.out.println(str.charAt(0));
System.out.println(Integer.parseInt(str));//a不能轉換為int
}catch(NullPointerException e){
System.out.println("出現了一個空指標!");
}catch(StringIndexOutOfBoundsException e){
System.out.println("下標越界了!" );
/*
* 要養成一個好習慣,在最後一個catch上去捕獲最大的Exception,以防止程式出現一個未捕獲的異常導 致程式退出。還要注意的是,若捕獲的異常中有父子
* 類關係的,一定是子類異常在上,父類異常在下。
*/
}catch(Exception e){
System.out.println("反正就是出了個錯!");
}
System.out.println("程式結束了");
}
}
執行結果:
程式開始了
1
a
反正就是出了個錯!
程式結束了
例2:finally示例:
package day03;
/**
* finally面試題
* @author Administrator
*
*/
public class ExceptionDemo3 {
public static void main(String[] args) {
System.out.println(test("0") + "," +test(null) + "," +test(""));
}
@SuppressWarnings("finally")
public static int test(String str){
try {
return '0'-str.charAt(0);
} catch (NullPointerException e) {
return 1;
} catch (Exception e){
return 2;
} finally{
return 3;
}
}
}
執行結果:
3,3,3
例3:自定義exception示例。
自定義人類年齡不合法:
地非同步寫一個類繼承至Exception,並重寫父類的方法:
package day03;
public class IllegalAgeException extends Exception {
/**
* 該異常表示年齡不合法
*/
private static final long serialVersionUID = 1L;
public IllegalAgeException() {
super();
// TODO Auto-generated constructor stub
}
public IllegalAgeException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public IllegalAgeException(String arg0) {
super(arg0);
// TODO Auto-generated constructor stub
}
public IllegalAgeException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
第二步:新建一個Person人使用者,設定年齡:
package day03;
/**
* 描述一個使用者資訊
*/
public class Person {
private int age;
public int getAge() {
return age;
}
/**
* 通常,方法中使用throw丟擲什麼異常,方法 宣告的時候就要使用throws定義該異常的丟擲。
* 方法上若使用throws聲明瞭某些異常的丟擲時,那麼外界在呼叫該方法的時候就有一個強制要求,必須處理這些異常。
* 處理的手段有兩種: 1.try-catch捕獲該異常。2.接著向外丟擲。
* 需要注意,當我們使用throw丟擲的不是RuntimeException及其子類異常時,就必須處理這個異常。
* @param age
* @throws IllegalAgeException
*/
public void setAge(int age) throws IllegalAgeException{
if(age<0||age>100){throw new IllegalAgeException("不符合人類年齡");}
this.age = age;
}
}
第3步:使用自定義的異常測試:
package day03;
public class TestPerson {
public static void main(String[] args){
Person p = new Person();
try {
p.setAge(1000);
} catch (IllegalAgeException e) {
e.printStackTrace();
}//這裡會丟擲異常。
System.out.println("他的年齡是:"+p.getAge());
}
}
執行結果:
day03.IllegalAgeException: 不符合人類年齡
at day03.Person.setAge(Person.java:30)
at day03.TestPerson.main(TestPerson.java:7)
他的年齡是:0