在使用計算機語言進行項目開發的過程中,即使程序員把代碼寫的盡善盡美,在系統的運行過程中仍然會遇到一些問題,因為很多問題不是靠代碼能夠避免的,比如:客戶輸入數據的格式,讀取文件是否存在,網絡是否始終保持通暢等等。
異常:在java語言中,將程序執行中發生的不正常情況稱為“異常”。
(開發過程中的語法錯誤和邏輯錯誤不是異常)
java程序在執行過程中所發生的異常事件可分為兩類:
1.Error:java虛擬機無法解決的嚴重問題。如:JVM系統內部錯誤、資源耗盡等嚴重狀況。一般不編寫針對性的代碼進行處理。
2.Exception:其他因編程錯誤或偶然的外在因素導致的一般性問題,可以使用針對性的代碼進行處理。如:空指針訪問、試圖讀取不存在的文件、網絡連接中斷
一、異常的體系結構:
java.lang.Throwable
|----Error:錯誤,程序中不進行處理
|----Exception:異常,要求在編寫程序時,就要考慮到對這些異常的處理
|----編譯時異常:在編譯期間會出現的異常(執行javac.exe命令時,出現異常)
|----運行時異常:在運行期間出現的異常(執行java.exe命令時,出現的異常)(文件找不到、IO異常... )
捕獲錯誤最理想的是在編譯期間.java--javac.exe--.class--java.exe
當執行一個程序時,如果出現異常,那么異常之后的代碼就不再執行!
package com.atguigu.java1;
import java.beans.Customizer;
import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import org.junit.Test;
public class TestException {
//*編譯時異常*
@Test
public void test6(){
FileInputStream fisFileInputStream = new FileInputStream(new File("hello.txt"));
int b;
while ((b = fis.read())!= -1) {
System.out.println((char)b);;
}
}
//*常見的運行時異常8
/*
Bank bank = new Bank();
Customer[] cust = new Customer[5];
Cust[0] = new Customer();若沒有
System.out.println(cust[0].getFirstName());可能出現空指針異常
Cust[0].setAccount(new Account);若沒有
Cust[0].getAccount().withdraw(100);可能出現空指針異常
*/
//4.空指針異常:NullPointerException
@Test
public void test5(){
Person p = new Person();
p = null;//一旦定義為空。。。
System.out.println(p.toString());
}
//3.類型轉換異常:ClassCastException
@Test
public void test4(){
Object obj = new Date();
String str = (String) obj;//編譯沒有錯誤,因為str以為自己將obj字符串轉換。
}
//2.算數異常:ArithmeticException
@Test
public void test3(){
int i = 9;
System.out.println(i/0);
}
//1.數組下標越界異常ArrayIndexOutOfBoundsException
@Test
public void test2(){
int[] i = new int[10];
System.out.println(i[10]);
}
}
class Person{
}