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出現了一個新的異常處理方案: