異常是什麼和怎麼去處理!--
為什麼要學習異常?
如果不處理異常,就會交給JVM處理異常,一旦交給JVM,程式就會異常終止。
java中異常體系:錯誤和異常
錯誤是程式碼中客觀存在的,有兩種方式處理:
LBYL
: Look Before You Leap.
在操作之前就做充分的檢查
.
EAFP
: It's Easier to Ask Forgiveness than Permission. "
事後獲取原諒比事前獲取許可更容易
".
也就是先操作
,
遇到
問題再處理
.
異常分為執行時異常(非受查異常)和編譯時異常(受查異常)
每個人開始寫程式碼都會遇到或多或少的異常,例如:
public static void main(String[] args) {
System.out.println(10/0); //算術異常
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr[100]); //陣列越界異常
}
public int num = 10;
public static void main(String[] args) {
TestDemo t = null;
System.out.println(t.num); //空值異常
}
所以:異常就是在程式執行時出現錯誤時通知呼叫者的一種機制。
處理方式:
一、捕獲異常 try... catch.......
public static void main(String[] args) {
try {
System.out.println(10/0);
}catch (ArithmeticException e) {
System.out.println("算術異常");
}
System.out.println("我還能行");
}
所以只要捕獲相應的異常,程式就能繼續執行
也可以捕獲多個異常:
public static void main(String[] args) {
try {
System.out.println(10/5);
int[] array = null;
System.out.println(array.length);
}catch (ArithmeticException | NullPointerException e) {
//可以用(Exception e)直接捕獲全部異常,不推薦
e.printStackTrace();
System.out.println("異常");
}
System.out.println("我還能行");
}
但是,catch只能處理對應種類的異常。
finally:finally塊當中的程式碼一定會被執行
public static void main(String[] args) {
try {
System.out.println(10 / 0);
int[] array = null;
System.out.println(array.length);
}catch (Exception e) {
e.printStackTrace();
System.out.println("異常");
}finally {
System.out.println("finally塊當中的程式碼一定會被執行!");
}
System.out.println("我還能行");
}
public static void main(String[] args) {
System.out.println(func2());
}
public static int func2() {
try {
return 10;
} finally {
return 20;
}
}
//最後會列印出20
close:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
int a = scanner.nextInt();
System.out.println(10 / a);
int[] array = null;
System.out.println(array.length);
} catch (ArithmeticException | NullPointerException e) {
e.printStackTrace();
System.out.println("異常");
} finally {
System.out.println("finally塊當中的程式碼一定會被執行!");
scanner.close(); //退出
}
System.out.println("我還能行");
}
當方法中的異常比較多,可以用throw宣告異常:
public static void main(String[] args) {
try {
func();
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
System.out.println("after try catch");
}
public static void func() throws ArithmeticException,NullPointerException,ArrayIndexOutOfBoundsException {
int[] arr = {1, 2, 3};
System.out.println(arr[100]); //陣列越界異常
}
下來是如何去寫有異常的程式碼:有註釋
public static double func(int x,int y)throws ArithmeticException{
if (y == 0) {
throw new ArithmeticException("除數為0"); //如果y = 0,丟擲算術異常
}
return x*1.0 / y ;
}
//上面這個方法宣告瞭會出現算術異常,但沒有處理,下來我們寫程式碼時就可以處理一下
public static void main5(String[] args) {
try{
System.out.println(func(10,0));
}catch (ArithmeticException e){
e.printStackTrace();
System.out.println("除數為零");
}
}
自定義異常:有註釋
class MyException extends Exception{ //繼承於編譯時異常更安全
public MyException() {
}
public MyException(String message) {
super(message);
}
}
public class TestDemo {
public static void func3(int x)throws MyException{
if (x == 10) {
throw new MyException("x==10"); //如果x=10,丟擲異常
}
}
public static void main(String[] args) {
try {
func3(10); //呼叫方法時可以自己處理異常
}catch (MyException e) {
e.printStackTrace();
}
}
}
相關文章
- dns異常是什麼意思 dns異常怎麼處理DNS
- Python中異常是什麼意思?與錯誤有什麼區別?Python
- dns異常怎麼修復 dns配置異常怎麼處理DNS
- dns解析狀態異常怎麼處理 dns解析異常怎麼修復DNS
- python異常處理的流程是什麼?Python
- Dubbo 自定義異常,你是怎麼處理的?
- pip install scrapy 報異常時怎麼處理?
- dns異常是路由器壞了嗎 路由器dns異常怎麼修復DNS路由器
- 企業微信客戶群去重處理有什麼用?
- 什麼是異常?python處理異常的方式有幾種?Python
- 處理異常時,在catch中return會怎麼樣?
- 什麼是流處理
- 什麼是批處理
- jpg檔案通常是什麼 一般什麼叫jpg檔案
- 電腦更新有什麼好處和壞處,怎麼更新電腦呢
- 網路網賭賬號異常系統抽查怎麼處理?
- C++編譯器怎麼實現異常處理1 (轉)C++編譯
- C++編譯器怎麼實現異常處理3 (轉)C++編譯
- C++編譯器怎麼實現異常處理2 (轉)C++編譯
- Go語言的 序列處理 和 並行處理 有什麼區別 ?Go並行
- java事件處理模型是什麼Java事件模型
- 什麼是雙核處理器?
- 保稅品怎麼處理呢?
- 電腦沒聲音是什麼原因 電腦沒聲音怎麼處理
- PHP錯誤處理和異常處理PHP
- win10小盾牌去不掉怎麼辦 win10軟體上有盾牌去不掉處理方法Win10
- Windows為什麼會出現埠占用?如何處理埠異常佔用?Windows
- 網站以資料異常稽核處理賬號提不了怎麼辦?網站
- 卷向位元組碼-Java異常到底是怎麼被處理的?Java
- dns劫持,dns劫持是什麼,該怎麼去預防dns劫持DNS
- Xshell中文亂碼怎麼處理?
- 丟失重做日誌怎麼處理
- 照片處理工具有什麼呢,怎麼摳圖
- matlab影象處理為什麼要歸一化和如…Matlab
- 什麼是NLP,NLP主要有什麼用,為什麼要學自然語言處理?自然語言處理
- 什麼是異常
- 字串中包含單引號和雙引號怎麼處理字串
- Serverless工作流並行步驟(type:foreach)怎麼做異常處理?Server並行