異常就是在程序的運行過程中出現的不正常現象導致了程序中斷,之前遇到的異常有哪些?
1.空指針異常: NullPointerException
2.類型轉換異常:ClassCastException
3.算術異常: ArithmeticException
在java中, 把一些不正常現象進行了抽象, 形成了一些異常類。
在Throwable類的getMessage()/printStackTrace()這兩個方法,所有的異常都有。
編譯時異常,也稱受檢異常是指在編譯前必須進行預處理, 并不是說這個異常在編譯階段發生,所有的異常都是在運行階段才可能發生. 就像樓道中必須有滅火器與消防栓, 如果沒有這些設備, 就沒有安全證, 沒有這個安全證,企業就不能生產. 企業必須有火災的預處理措施, 火災現在并沒有發生。
編譯階段進行語法檢查, Java的語法有很多條, 其中一語語法是: 對于受檢異常必須進行預處理。
package com.wkcto.chapter02.demo01;
/**
* 運行時異常都是RuntimeException類的子類
* 不需要進行預處理,
* 通過規范的代碼進行規避
* @author 蛙課網
*
*/
public class Test01 {
public static void main(String[] args) {
int x = 10;
int y = 2;
// divide(x, y); //10/2=5
// divide(10, 0); //這一行產生了異常,導致了程序中斷, 程序不再繼續向下執行
divide22(x, y);
divide22(10, 0);
System.out.println("main....end...");
}
//定義方法,計算兩個整數的商, 沒有判斷除數為0的情況
public static void divide( int num1, int num2) {
int result = num1/num2;
System.out.println( num1 + "/" + num2 + "=" + result);
}
//定義方法,計算兩個整數的商, 通過判斷除數為0避免出現算術異常
public static void divide22( int num1, int num2) {
if ( num2 == 0 ) {
System.out.println("除數不能為0");
return ; //結束方法的執行
}
int result = num1/num2;
System.out.println( num1 + "/" + num2 + "=" + result);
}
}
package com.wkcto.chapter02.demo01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* 演示編譯時異常
* 受檢異常, 受控異常
* @author 蛙課網
*
*/
public class Test02 {
public static void main(String[] args) {
//讀取d:/abc.txt文件中的內容, 使用了FileInputStream類
FileInputStream fis = new FileInputStream("d:/abc.txt");
//SUN在定義FileInputStream構造方法時, 通過 throws關鍵字聲明了FileNotFoundException異常,
//這個異常就是受檢異常, 即在定義方法時, 通過throws聲明的異常
//受檢異常在編譯前必須進行預處理, 否則編譯語法報錯
}
}