異常處理(try catch)
阿新 • • 發佈:2019-01-24
package day20150904exception;
/**
* (1)異常處理機制中的try catch
*/
public class ExceptionDemo1 {
public static void main(String[] args) {
System.out.println("程式開始");
try {
/*
* 當出現空指標後,jvm建立一個空指標異常例項,
* 將它丟擲來,如果沒有try語句,則拋給呼叫的方法,同時結束程式
*
* 如果有try語句,則跳出try,程式繼續往下走
*/
String str = null;
System.out.println(str.length());//NullPointerException
System.out.println(str.charAt(0));
//空指標異常找到對應引數型別的catch後,把例項傳給e
} catch (NullPointerException e) {
e.printStackTrace();
//良好的程式在最後捕捉父類Exception,不可寫在最前
}catch(Exception e){
e.printStackTrace();
/**無論try裡的程式碼是否出異常,finally裡的程式碼都要執行
*
* finally裡通常不寫return
* 如果寫了,try中的return值無法返回方法
* 而是返回finally中的return值
*/
}finally{
System.out.println("finally裡的程式碼都要執行" );
}
// String str2 = "a";
// System.out.println(Integer.parseInt(str2));//NumberFormatException
System.out.println("程式結束");
}
}
/**
* 子類重寫父類的方法時,子類方法可不拋異常
* 可丟擲父類的部分異常
* 可丟擲父類異常的子類異常
*
* 不可丟擲父類沒有的異常
* 不可丟擲父類異常的父類異常
*/
package day20150904exception;
//(4)獲取異常資訊-------------
public class ExceptionDemo4 {
public static void main(String[] args) {
//String str = null;
//丟擲NullPointerException
//System.out.println(str.length());
try {
String str ="a";
//NumberFormatException
System.out.println(Integer.parseInt(str));
} catch (NumberFormatException e) {
e.printStackTrace();
//獲取異常資訊:For input string: "a"
System.out.println(e.getMessage());
}
System.out.println("The End");
}
}
package day20150904exception;
/**
* 獲取錯誤原因
* 異常時,為保證異常風格統一
* 包裝之後再拋
* 想獲取真是原因,可呼叫異常的getCause
*/
public class ExceptionDemo5 {
public static void main(String[] args) {
try {
dosome();
} catch (Exception e) {
e.printStackTrace();//爆出異常java.lang.Exception,而不是空指標異常
//使用getCause方法獲取原因
System.out.println(e.getCause());//執行結果:null
}
}
public static void dosome() throws Exception{
try {
String str = null;
System.out.println(str.length());
} catch (NullPointerException e) {
//catch裡丟擲異常,把NullPointerException包裝成Exception丟擲
throw new Exception();
}
}
}
package day20150904exception;
//(2)主動拋異常----------
public class Person2 {
private int age;
public int getAge() {
return age;
}
/**
* throw異常的2種情況:
* 1.當前方法中出了個異常
* 處理當前異常的責任不應該歸當前方法管
* 這時丟擲異常,誰調這個方法誰解決
* 2.當程式遇到一個滿足語法要求
* 但是不符合業務邏輯時
* 這種情況可以主動throw一個異常出來
*/
public void setAge(int age) {
if(age<=0 || age>150){
throw new RuntimeException("年齡貌似不對哦");
}
this.age = age;
}
public static void main(String[] args) {
Person2 p = new Person2();
p.setAge(1000000);
}
}
package day20150904exception;
//(3)主動拋異常----------
public class Person3 {
private int age;
public int getAge() {
return age;
}
/**
*通常情況下若方法中throw了一個異常例項
*則必須處理該異常,處理方式有2種:
*1.為throw異常新增try catch
*2.在當前方法上宣告該類異常的丟擲
* 以便於通知呼叫者處理該異常
*
* RuntimeException有點例外(非檢查異常)
*/
//throws表示可能會發生的異常
public void setAge(int age) throws Exception{
if(age<=0 || age>150){
throw new Exception("年齡貌似不對哦");
}
this.age = age;
}
//永遠不要在main方法上寫throws
public static void main(String[] args) {
Person3 p = new Person3();
/*
* 如果自定義異常繼承RuntimeException,則可解決可不解決
* 即try catch可寫可不寫
*/
try {
p.setAge(1000000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package day20150904exception;
import java.io.PrintStream;
import java.io.PrintWriter;
//自定義異常--------------
/**
* 自定義異常,表示年齡不符人的年齡
*
* 如果繼承RuntimeException,則可解決可不解決
*/
//public class MyException extends RuntimeException{
public class MyException5 extends Exception{
private static final long serialVersionUID = 1L;
//利用父類的構造方法來建立本類構造方法
public MyException5() {
super();
}
public MyException5(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public MyException5(String arg0) {
super(arg0);
}
public MyException5(Throwable arg0) {
super(arg0);
}
}
-------------------------------------------------
package day20150904exception;
//()拋自定義異常----------
public class Person5 {
private int age;
public int getAge() {
return age;
}
/**
* RuntimeException有點例外(非檢查異常)
*/
public void setAge(int age) throws MyException5{
if(age<=0 || age>150){
throw new MyException5("年齡貌似不對哦");//繼承Exception
}
this.age = age;
}
public static void main(String[] args) {
Person5 p = new Person5();
/*
* 如果自定義異常MyException繼承RuntimeException,則可解決可不解決
* 即try catch可寫可不寫
*/
try {
p.setAge(1000000);
} catch (MyException5 e) {
e.printStackTrace();
}
}
}