1. 程式人生 > >Java基礎-19總結IO流,異常try…catch,throws,File類

Java基礎-19總結IO流,異常try…catch,throws,File類

1:異常(理解)

(1)程式出現的不正常的情況。

(2)異常的體系

Throwable

|--Error嚴重問題,我們不處理。

|--Exception

|--RuntimeException執行期異常,我們需要修正程式碼

|--非RuntimeException 編譯期異常,必須處理的,否則程式編譯不通過

package cn.itcast_01;

/*

 * 異常:程式出現了不正常的情況。

 * 

 * 舉例:今天天氣很好,班長出去旅遊。騎著自行車,去山裡面呼吸新鮮空氣。

 * 問題1:山路塌陷了,班長及時停住了,但是過不去了。嚴重的問題。

 * 問題2:班長出門推自行車,發現氣沒了,把氣吹起來。出發前就應該檢查的問題。

 * 問題3:班長騎著車在山路上愜意的行駛著,山路兩邊是有小石子的,中間是平坦的水泥路。

 * 一直在平坦的水泥路上行駛是沒有任何問題的,但是呢,他偏偏喜歡騎到小石子上,結果爆胎了。旅遊的過程中出現的問題。

 * no zuo no die。

 * 

 * 程式的異常:Throwable

 * 嚴重問題:Error 我們不處理。這種問題一般都是很嚴重的,比如說記憶體溢位。

 * 問題:Exception

 * 編譯期問題:不是RuntimeException的異常 必須進行處理的,因為你不處理,編譯就不能通過。

 * 執行期問題:RuntimeException這種問題我們也不處理,因為是你的問題,而且這個問題出現肯定是我們的程式碼不夠嚴謹,需要修正程式碼的。

 * 

 * 如何程式出現了問題,我們沒有做任何處理,最終jvm會做出預設的處理。

 * 把異常的名稱,原因及出現的問題等資訊輸出在控制檯。

 * 同時會結束程式。

 */

public class ExceptionDemo {

public static void main(String[] args) {

//第一階段

int a = 10;

// int b = 2;

int b = 0;

System.out.println(a / b);

//第二階段

System.out.println("over");

}

}

(3)異常的處理:

A:JVM的預設處理

把異常的名稱,原因,位置等資訊輸出在控制檯,但是呢程式不能繼續執行了。

B:自己處理

a:try...catch...finally

自己編寫處理程式碼,後面的程式可以繼續執行

package cn.itcast_02;

/*

 * 我們自己如何處理異常呢?

 * A:try...catch...finally

 * B:throws 丟擲

 * 

 * try...catch...finally的處理格式:

 * try {

 * 可能出現問題的程式碼;

 * }catch(異常名 變數) {

 * 針對問題的處理;

 * }finally {

 * 釋放資源;

 * }

 * 

 * 變形格式:

 * try {

 * 可能出現問題的程式碼;

 * }catch(異常名 變數) {

 * 針對問題的處理;

 * }

 * 

 * 注意:

 * A:try裡面的程式碼越少越好

 * B:catch裡面必須有內容,哪怕是給出一個簡單的提示

 */

public class ExceptionDemo {

public static void main(String[] args) {

// 第一階段

int a = 10;

// int b = 2;

int b = 0;

try {

System.out.println(a / b);

} catch (ArithmeticException ae) {

System.out.println("除數不能為0");

}

// 第二階段

System.out.println("over");

}

}

package cn.itcast_02;

/*

 * A:一個異常

 * B:二個異常的處理

 * a:每一個寫一個try...catch

 * b:寫一個try,多個catch

 * try{

 * ...

 * }catch(異常類名 變數名) {

 * ...

 * }

 * catch(異常類名 變數名) {

 * ...

 * }

 * ...

 * 

 * 注意事項:

 * 1:能明確的儘量明確,不要用大的來處理。

 * 2:平級關係的異常誰前誰後無所謂,如果出現了子父關係,父必須在後面。

 * 

 * 注意:

 * 一旦try裡面出了問題,就會在這裡把問題給丟擲去,然後和catch裡面的問題進行匹配,

 * 一旦有匹配的,就執行catch裡面的處理,然後結束了try...catch

 * 繼續執行後面的語句。

 */

public class ExceptionDemo2 {

public static void main(String[] args) {

// method1();

// method2();

// method3();

method4();

}

public static void method4() {

int a = 10;

int b = 0;

int[] arr = { 1, 2, 3 };

// 爺爺在最後

try {

System.out.println(a / b);

System.out.println(arr[3]);

System.out.println("這裡出現了一個異常,你不太清楚是誰,該怎麼辦呢?");

} catch (ArithmeticException e) {

System.out.println("除數不能為0");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("你訪問了不該的訪問的索引");

} catch (Exception e) {

System.out.println("出問題了");

}

// 爺爺在前面是不可以的

// try {

// System.out.println(a / b);

// System.out.println(arr[3]);

// System.out.println("這裡出現了一個異常,你不太清楚是誰,該怎麼辦呢?");

// } catch (Exception e) {

// System.out.println("出問題了");

// } catch (ArithmeticException e) {

// System.out.println("除數不能為0");

// } catch (ArrayIndexOutOfBoundsException e) {

// System.out.println("你訪問了不該的訪問的索引");

// }

System.out.println("over");

}

// 兩個異常的處理

public static void method3() {

int a = 10;

int b = 0;

int[] arr = { 1, 2, 3 };

try {

System.out.println(arr[3]);

System.out.println(a / b);

// System.out.println(arr[3]);

} catch (ArithmeticException e) {

System.out.println("除數不能為0");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("你訪問了不該的訪問的索引");

}

System.out.println("over");

}

// 兩個異常

public static void method2() {

int a = 10;

int b = 0;

try {

System.out.println(a / b);

} catch (ArithmeticException e) {

System.out.println("除數不能為0");

}

int[] arr = { 1, 2, 3 };

try {

System.out.println(arr[3]);

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("你訪問了不該的訪問的索引");

}

System.out.println("over");

}

// 一個異常

public static void method1() {

// 第一階段

int a = 10;

// int b = 2;

int b = 0;

try {

System.out.println(a / b);

} catch (ArithmeticException ae) {

System.out.println("除數不能為0");

}

// 第二階段

System.out.println("over");

}

}

package cn.itcast_02;

/*

 * JDK7出現了一個新的異常處理方案: