1.什么是異常.
2.異常的分類.
3.try ... catch ... finally結構的使用.
1.異常:中斷了正常指令流的事件.
是程序在運行的過程當中產生的,跟編譯沒有半毛錢關系.
程序語法是正確的.運行也可能產生異常.
2.異常的分類
JDK所提供的異常類.
3.try ... catch 實例.
finally,無論出不出異常,都會執(zhí)行finally.
//uncheck exception 這類異常,可以通過編譯. 在不加try ,,,catch的條件下可以通過編譯.
class Test{ public static void main(String agrs[]){ System.out.println(1); //uncheck exception try{ System.out.println(2); int i = 1 / 0 ; System.out.println(3); } catch(Exception e){ e.printStackTrace(); System.out.println(4); } finally{ System.out.println("finally"); } System.out.println(5); } }
//check Exception這類異常,如果不加try....catch.....就無法通過編譯.
class TestCheck{ public static void main(String args[]){ //check exception try{ Thread.sleep(1000); } catch(Exception e){ e.printStackTrace(); System.out.println(4); } finally{ System.out.println("finally"); } } }
finally 就是不管異常出不出現(xiàn)都要執(zhí)行, 這個在對于打開一個文件的時候,不管出不出錯,我們都要去關閉它.
所以像文件關閉這樣的操作就適合放在這個finally里面.
ps:
1.程序員對Error無能為力,只能處理Exception
2.對異常的處理關系到系統(tǒng)的健壯性
3.使用try ... catch ... finally來處理可能出現(xiàn)的異常
1.throw的作用.
2.throws的作用
實例來說明.
在java當中,所有的東西都有對象,
異常了是對象,所以我們可以生成異常對象.
使用一個類來生成.
jdk提代的runtimeException這個類生成一個異常
對象......
生成對象后,拋出....
總結:
- throw的作用,jdk, java虛擬機判斷不了,我們可以使用 throw拋出異常.
- throws的作用,聲明一個函數(shù)可能會產生異常,但是我們在這個函數(shù)里面不處理, 而且由調用這個函數(shù)的對象進行異常try....catch...finally....
class User{ private int age; public void setAge(int age) throws Exception{ if(age < 0){ //RuntimeException e = new RuntimeException("年齡不能為負數(shù)"); 屬于uncheck Exception //使用 uncheck Exception 可以進行編譯. Exception e = new Exception("年齡不能為負數(shù)"); //屬于check Exception //必須對其捕捉或聲明。 //使用 check exception不可編譯,如果要編譯,有兩種辦法 //1. 在這里進行try....catch.... 進行捕捉 //2. 使用throws進行聲明,這個函數(shù)可能產生異常,但是不捕捉,而是由調用這個函數(shù)的對象將其捕捉. throw e; } this.age = age; } }
class Test{ public static void main(String args[]){ User user = new User(); try{ user.setAge(-20);//這樣寫語法沒有問題 //但是荒唐了.所以我們要拋出異常. } catch(Exception e){ System.out.println(e); } } }
class User1{ private int age; public void setAge(int age) { if(age < 0){ System.out.println("age < 0"); try{ Exception e = new Exception(" try年齡不能為負數(shù)"); throw e; } catch(Exception e){ System.out.println("catch 年齡不能為負數(shù)"); e.printStackTrace(); } } this.age = age; } }
`class Test1{
public static void main(String args[]){
User1 user11 = new User1();
user11.setAge(-20);//這樣寫語法沒有問題
//但是荒唐了.所以我們要拋出異常.
}
}`