package day20150904exception;
/**
* (1)異常處理機制中的try catch
*/
public class ExceptionDemo1 {
public static void main(String[] args) {
System.out.println("程序開始");
try {
String str = null;
System.out.println(str.length());
System.out.println(str.charAt(0));
} catch (NullPointerException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
/**無論try裏的代碼是否出異常,finally裏的代碼都要執行
*
* finally裏通常不寫return
* 如果寫了,try中的return值無法返回方法
* 而是返回finally中的return值
*/
}finally{
System.out.println("finally裏的代碼都要執行");
}
System.out.println("程序結束");
}
}
/**
* 子類重寫父類的方法時,子類方法可不拋異常
* 可拋出父類的部分異常
* 可拋出父類異常的子類異常
*
* 不可拋出父類沒有的異常
* 不可拋出父類異常的父類異常
*/
package day20150904exception;
public class ExceptionDemo4 {
public static void main(String[] args) {
try {
String str ="a";
System.out.println(Integer.parseInt(str));
} catch (NumberFormatException e) {
e.printStackTrace();
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();
System.out.println(e.getCause());
}
}
public static void dosome() throws Exception{
try {
String str = null;
System.out.println(str.length());
} catch (NullPointerException e) {
throw new Exception();
}
}
}
package day20150904exception;
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;
public class Person3 {
private int age;
public int getAge() {
return age;
}
/**
*通常情況下若方法中throw了一個異常實例
*則必須處理該異常,處理方式有2種:
*1.爲throw異常添加try catch
*2.在當前方法上聲明該類異常的拋出
* 以便於通知調用者處理該異常
*
* RuntimeException有點例外(非檢查異常)
*/
public void setAge(int age) throws Exception{
if(age<=0 || age>150){
throw new Exception("年齡貌似不對哦");
}
this.age = age;
}
public static void main(String[] args) {
Person3 p = new Person3();
try {
p.setAge(1000000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package day20150904exception;
import java.io.PrintStream;
import java.io.PrintWriter;
/**
* 自定義異常,表示年齡不符人的年齡
*
* 如果繼承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("年齡貌似不對哦");
}
this.age = age;
}
public static void main(String[] args) {
Person5 p = new Person5();
try {
p.setAge(1000000);
} catch (MyException5 e) {
e.printStackTrace();
}
}
}