欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java基教--異常與錯誤區別 Error and Exception
Java基教--異常與錯誤區別 Error and Exception
原載csdn 專(zhuān)欄
了解異常與錯誤的區別,并且知道當你截獲一個(gè)異常時(shí),應該怎么辦。
by Josh Street
許多程序員并沒(méi)有意識到一個(gè)錯誤和一個(gè)異常是有區別的,在出現問(wèn)題時(shí),這種區別對如何操作你的代碼有很重要的含意(見(jiàn)工具條,“簡(jiǎn)介錯誤與異常”)。正如Mary Campione在The Java Tutorial(Java指南)中所寫(xiě)的,“一個(gè)異常是在一個(gè)程序執行過(guò)程中出現的一個(gè)事件,它中斷了正常指令的運行。”根據American Heritage Dictionary的解釋?zhuān)粋€(gè)錯誤是“偏離了可接受的代碼行為的一個(gè)動(dòng)作或一個(gè)實(shí)例。”
那么偏離(deviation)和中斷(disruption)有什么不同呢?我們可以這么來(lái)解釋?zhuān)喝绻阏谝粭l路上駕駛,有人截住了你,這就是中斷。如果車(chē)發(fā)動(dòng)不了了,那就是偏離(除非是我的車(chē),我們認為這種情況是normal的)。
這同Java有什么關(guān)系呢?有很大的關(guān)系。Java有個(gè)很有趣的錯誤和異常層次關(guān)系(見(jiàn)圖1)。
的確,運用try {} catch (Exception e) {}的所有代碼只能找到一半你的錯誤。但是你是否應該截獲Throwable取決于你一旦截獲了它,你準備怎么處理它。對Error的子集的快速了解可以讓你知道許多類(lèi)的名字,如VirtualMachineError、ThreadDeath和LinkageError。在你打算截獲這些錯誤時(shí),確信你要處理它們,因為它們是嚴重的問(wèn)題,所以是錯誤。

圖1. 
但ClassCastException不是一個(gè)錯誤嗎?的確不是。一個(gè)ClassCastException——或一種異?!皇荲M(虛擬機)通知你的一種方式,通過(guò)這種方式,VM讓你知道,你(開(kāi)發(fā)人員)已經(jīng)犯了個(gè)錯誤,現在有一個(gè)機會(huì )來(lái)修改它。
另一方面,錯誤是VM的一個(gè)故障(雖然它可以是任何系統級的服務(wù))。我們來(lái)引用JavaDoc對Error的定義:“Error是Throwable的一個(gè)子集,它指的是一個(gè)合理的應用程序不能截獲的嚴重的問(wèn)題。大多數都是反常的情況。”
所以,錯誤是很難處理的,一般的開(kāi)發(fā)人員(當然不是你)是不能理解處理這些錯誤的微妙之處的。那么在你的工作中,當你覺(jué)得會(huì )產(chǎn)生一個(gè)足以被稱(chēng)為錯誤的一個(gè)事件時(shí),該怎么辦呢?
首先,記住錯誤是像異常一樣被拋出的,只有一點(diǎn)不同。拋出一個(gè)錯誤的方法不需要聲明它在做什么(換句話(huà)說(shuō),異常是unchecked): public void myFirstMethod() throws Exception
    //Since it‘s an exception, I have to declare
    //it in the throws clause {
    throw new Exception();
}
public void mySecondMethod()
    //Because errors aren‘t supposed to occur, you
    //don‘t have to declare them.
{
    throw new Error();
}
 

注意有幾個(gè)異常是unchecked的,因此,其行為就同錯誤一樣:NullPointerException、ClassCastException和IndexOutOfBoundsException都是RuntimeException的子類(lèi),RuntimeException及其所有的子集通常都是unchecked的。
那么你應該怎么處理這些討厭的unchecked的異常呢?你可以在它們可能出現的方法中截獲異常,但這種方法有很大的偶然性。這么做可以解決一個(gè)問(wèn)題,但是它會(huì )使其它unchecked的異常中斷代碼的其它部分。我們應該感謝ThreadGroup類(lèi)提供的一個(gè)很好的辦法: public class ApplicationLoader extends ThreadGroup
{
     private ApplicationLoader()
     {
          super("ApplicationLoader");
     }
     public static void main(String[] args)
     {
          Runnable appStarter = new Runnable()
          {
               public void run()
               {
                    //invoke your application
                    (i.e. MySystem.main(args)}
          }
          new Thread(new ApplicationLoader(),
appStarter).start();
     }
     //We overload this method from our parent
     //ThreadGroup , which will make sure that it
     //gets called when it needs to be.  This is
     //where the magic occurs.
public void uncaughtException(Thread thread, Throwable exception)
     {
          //Handle the error/exception.
          //Typical operations might be displaying a
          //useful dialog, writing to an event log, etc.
     }
 

這個(gè)方法給我們的編程帶來(lái)了很大的改變。想想吧,過(guò)去當你在你的GUI中執行一個(gè)操作時(shí),如果出現了一個(gè)unchecked的異常,你的GUI通常處于一種不正常的狀態(tài)(對話(huà)框仍然打開(kāi)、按鈕不能激活,指針處于錯誤狀態(tài)),但是運用這種方法,你就可以使GUI回復到其正常狀態(tài),通知用戶(hù)所出現的錯誤,對此你會(huì )感覺(jué)良好,因為你編寫(xiě)了一個(gè)高質(zhì)量的應用程序。
但這種技巧不僅僅用于GUI。運用過(guò)多資源的服務(wù)器應用程序可以用這種方法在全局釋放資源,通常避免VM進(jìn)入一種不穩定的狀態(tài)。盡早并盡可能多地截獲錯誤、以明智的方法來(lái)處理它們,這是一個(gè)偉大的程序員和一個(gè)普通的程序員之間的不同。由于你已經(jīng)閱讀了本文,你想成為哪種程序員就是顯而易見(jiàn)的了。

關(guān)于作者:
Josh Street是Bank of America的一位架構師,他主要負責開(kāi)發(fā)電子商務(wù)解決方案。他的聯(lián)系方式是rjstreet@computer.org。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java面向對象基礎(封裝繼承多態(tài))【4】 異常處理
Java異常分類(lèi)
Java 異常處理的最佳實(shí)踐
深入學(xué)習java異常機制
Java工程師教你遇到異常怎么解決!3個(gè)實(shí)驗一目了然,共勉!
面試官:說(shuō)說(shuō)你對Java異常的理解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久