国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java異常簡介

wangym / 1313人閱讀

摘要:而異常可以不被顯式的處理都是的子類,繼承了的就是異常,其他的就是異常。常見異常類列舉幾個常見的運行時異常數(shù)組越界異常空指針異常類轉(zhuǎn)換異常數(shù)字格式異常運算異常。

Java異常

java異常分為兩大類,Checked異常和Runtime異常,Checked異常都是在編譯階段可以被處理的異常。

Checked異常和Runtime異常的區(qū)別和聯(lián)系

Checked異常都是可以被處理的異常,在程序中必須顯式地處理Checked異常,如果沒有處理,那么編譯就會報錯。而Runtime異常可以不被顯式的處理;

都是Exception的子類,繼承了RuntimeException的就是Runtime異常,其他的就是Checked異常。

常見異常類

列舉幾個常見的運行時異常RuntimeException:

IndexOutOfBoundException:數(shù)組越界異常;

NullPointerException:空指針異常;

ClassCastException:類轉(zhuǎn)換異常;

NumberFormatException:數(shù)字格式異常;

ArithmeticException:運算異常。

列舉幾個非運行時異常(Checked異常):

SQLException:SQL異常;

IOException:IO異常;

FileNotFoundException:文件找不到異常,是IOException的子類;

InterruptedException:中斷異常,一般用在多線程編程;

ClassNotFoundException:類找不到。

Error錯誤

Error錯誤一般指與虛擬機相關(guān)的問題,如系統(tǒng)崩潰,虛擬機錯誤,動態(tài)鏈接失敗等,這種錯誤無法恢復(fù)或不可被捕獲,將導(dǎo)致應(yīng)用程序中斷。通常應(yīng)用程序也無法處理這些錯誤,因此程序中不應(yīng)該試圖使用catch來捕獲Error對象。在方法定義時,也無需throws Error對象。

Checked異常的使用

前面提到了Checked必須顯式的處理,不然編譯報錯,比如聲明一個文件輸入流:

FileInputStream fis = new FileInputStream("test.md");

這段代碼編譯會報錯

Unhandled exception type FileNotFoundException

因此必須顯式的處理它,處理Checked異常的方式一般有兩種:

如果知道如何處理,那么最好使用try…catch...塊處理:

//Checked異常必須被顯式處理
try {
  FileInputStream fis = new FileInputStream("test.md");
} catch (FileNotFoundException e) {
  e.printStackTrace();
  System.out.println("文件不存在!");
}

如果不知道如何處理,那么就在方法中拋出,由上一級調(diào)用者處理:

public static void main(String[] args) throws FileNotFoundException {

  //Checked異常必須被顯式處理
  //在main方法中拋出異常,交給JVM處理,JVM對異常的處理辦法就是打印跟蹤棧信息,并終止程序運行
  FileInputStream fis = new FileInputStream("test.md");
}

使用throw自行拋出異常

有的時候根據(jù)業(yè)務(wù)需要,我們在程序里面會自行拋出異常,比如如果讀取的文件內(nèi)容為空,我們就認(rèn)為這是一個異常,這時候我們可以使用throw來主動拋出異常,并且用catch捕獲它:

//使用throw主動拋出異常
try {
  FileInputStream fis = new FileInputStream("test.md");
  if(fis.read() == 0) {
    throw new IOException("空文件");
  }
} catch (IOException e) {
  e.printStackTrace();
}

如果throw拋出的是一個runtime異常,那么程序可以用try…catch…捕獲,也可以不用理會。

異常鏈處理

在真實的企業(yè)級應(yīng)用中,我們往往不會講底層的異常暴露給上層應(yīng)用,比如不會把SQL異常暴露到用戶界面上。一是對于用戶而言,看到SQL異常對他們也沒啥幫助,二是對于惡意用戶而言,暴露底層異常不安全。

那么如何屏蔽底層異常呢?通常的做法是:程序先捕獲原始異常,然后拋出一個新的業(yè)務(wù)異常,新的業(yè)務(wù)異常包含了對用戶的提示信息,這種處理方式成為異常轉(zhuǎn)譯。下面演示一個創(chuàng)建用戶的程序如何屏蔽底層異常:

//演示異常鏈,創(chuàng)建用戶
public void createSubscriber(int subId) throws BusinessException {
  try {
    //創(chuàng)建用戶的邏輯......

  }catch(Exception e){
    //處理并保存原始異常...

    //拋出新的業(yè)務(wù)異常
    throw new BusinessException("用戶創(chuàng)建失敗");
  }
}

可以看到程序把原始異常隱藏起來,僅向上提供必要的異常提示信息,可以保證底層異常不會擴展到表現(xiàn)層,這完全符合對象的封裝原則。

這種把捕獲一個異常然后拋出另一個異常,并把原始異常信息保存下來,是一種典型的鏈?zhǔn)教幚恚谠O(shè)計模式中被稱為責(zé)任鏈模式

使用異常的幾個建議

我們使用異常是為了實現(xiàn)幾個目標(biāo):

使程序代碼混亂最小化;

捕獲并保留診斷信息;

通知合適的人員;

采用合適的方式結(jié)束異常活動。

針對這些目標(biāo),我們應(yīng)該做到:

不要過度使用和依賴它:異常很方便,但是不要把正常的邏輯處理都使用異常處理,比如

//原始代碼
if(fileSize > 100){
  Sysotem.out.println("文件過大,請重新上傳");
  continue;
}
//改成使用異常 
if(fileSize > 100){
  throw new Exception("文件過大,請重新上傳");
}
//這樣做,很明顯不負責(zé)任。

不要在try里面寫很多代碼:這樣可能增加異常分析的難度,并且大量的代碼可能需要大量的catch來捕獲不同的異常;

避免使用catch來捕獲所有類型的異常:比如catch(Throwable t)或者catch(Exception e)這樣,對所有異常使用同樣的邏輯處理,不得不寫很多if語句處理不同情況,得不償失,并且這種捕獲方式可能將Error、Runtime等可能導(dǎo)致程序終止的異常捕獲,從而“壓制”了異常,一些關(guān)鍵異常可能被悄悄忽略;

不要忽略捕獲到的異常:catch應(yīng)該做一些有用的事情,不要為空或者只打印異常,catch塊為空就是瞞天過海,程序出了錯誤,所有人看不到任何異常,但是程序可能已經(jīng)壞了!在捕獲到異常的時候,要么處理它,要么拋出新異常,要么向上拋出并在合適的地方處理異常。

參考:

《瘋狂java講義》

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69434.html

相關(guān)文章

  • Java 8 Optional 簡介

    摘要:本文簡單介紹中的最常用法。在業(yè)務(wù)邏輯中使用判斷的值是否為空,可以用方法,例如系統(tǒng)屬性不存在。標(biāo)準(zhǔn)的用法應(yīng)該是用方法。如下所示這樣的語句比判斷簡潔的多。不過,這個遺憾在中得到了補足。但同樣,設(shè)計出來并不是這么用的。 本文簡單介紹 Java 8 中 Optional 的最常用法。 創(chuàng)建 Optional 創(chuàng)建 Optional 有三個方法,如下所示: // 方法1:參數(shù)不能為 null,否...

    waltr 評論0 收藏0
  • Java性能壓測工具及其調(diào)優(yōu)

    摘要:性能壓測工具及其調(diào)優(yōu)工具使用使用使用簡介在日常的開發(fā)中,的性能顯得尤為重要,一個程序的好壞主要就是性能來決定的。工具主要就是用于對程序進行壓力測試的一種有有力工具。 ...

    cuieney 評論0 收藏0
  • Java程序員修煉之道學(xué)習(xí)筆記(1)-簡介

    摘要:舊寫法文件處理文件處理文件處理新寫法文件處理可能會出現(xiàn)資源無法關(guān)閉的情況,改進寫法為各個資源獨立聲明變量文件處理鉆石語法針對創(chuàng)建泛型定義和實例過于繁瑣做出的改進 轉(zhuǎn)載請注明出處 http://www.paraller.com 原文排版地址 點擊跳轉(zhuǎn)-簡介/) 使用Java代碼的整個過程 .java --javac--> .class --類加載器--> 轉(zhuǎn)換后的.class --解...

    chanjarster 評論0 收藏0
  • 13張圖解就能讓女朋友徹底了解Java中的內(nèi)存模型,快上車!

    摘要:前言了解中的對象變量等存放的內(nèi)存區(qū)域十分重要本文將全面講解虛擬機中的內(nèi)存模型分區(qū),希望你們會喜歡目錄張圖解就能讓女朋友徹底了解中的內(nèi)存模型,快上車虛擬機 前言了解Java中的對象、變量等存放的內(nèi)存區(qū)域十分重要本文將全面講解Java虛擬機中的內(nèi)存模型 & 分區(qū),希望你們會喜歡目錄1、內(nèi)存模型 & 分區(qū)Java虛擬機在運行Ja...

    番茄西紅柿 評論0 收藏2637
  • 強推!大牛程序員必備的Java日志框架,性能無敵

    摘要:本文要來分享給大家程序員最常用的日志框架組件。沒有基礎(chǔ)的同學(xué)也不要著急,這套教程覆蓋了目前所有的日志框架,只要你學(xué),就一定用得到,先收藏,以備不時之需。 作為一名Java程序員,我們開發(fā)了很多Java應(yīng)用程序,包括桌面應(yīng)用、WEB應(yīng)用以及移動應(yīng)用。然而日志系統(tǒng)是一個成熟Java應(yīng)用所必不可少的。在開發(fā)和調(diào)試階段,日志可以幫...

    zebrayoung 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<