国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

RuntimeException的特殊情況

2019-11-18 13:19:47
字體:
供稿:網(wǎng)友

  本章的第一個例子是:
  if(t == null)
  throw new NullPointerException();
  看起來似乎在傳遞進入一個方法的每個句柄中都必須檢查null(因為不知道調(diào)用者是否已傳遞了一個有效的句柄),這無疑是相當(dāng)可怕的。但幸運的是,我們根本不必這樣做——它屬于java進行的標(biāo)準(zhǔn)運行期檢查的一部分。若對一個空句柄發(fā)出了調(diào)用,Java會自動產(chǎn)生一個NullPointerException違例。所以上述代碼在任何情況下都是多余的。
  這個類別里含有一系列違例類型。它們?nèi)坑蒍ava自動生成,毋需我們親自動手把它們包含到自己的違例規(guī)范里。最方便的是,通過將它們置入單獨一個名為RuntimeException的基礎(chǔ)類下面,它們?nèi)拷M合到一起。這是一個很好的繼續(xù)例子:它建立了一系列具有某種共通性的類型,都具有某些共通的特征與行為。此外,我們沒必要專門寫一個違例規(guī)范,指出一個方法可能會“擲”出一個RuntimeException,因為已經(jīng)假定可能出現(xiàn)那種情況。由于它們用于指出編程中的錯誤,所以幾乎永遠(yuǎn)不必專門捕捉一個“運行期違例”——RuntimeException——它在默認(rèn)情況下會自動得到處理。若必須檢查RuntimeException,我們的代碼就會變得相當(dāng)繁復(fù)。在我們自己的包里,可選擇“擲”出一部分RuntimeException。
  假如不捕捉這些違例,又會出現(xiàn)什么情況呢?由于編譯器并不強制違例規(guī)范捕捉它們,所以假如不捕捉的話,一個RuntimeException可能過濾掉我們到達(dá)main()方法的所有途徑。為體會此時發(fā)生的事情,請試試下面這個例子:
  
  //: NeverCaught.java
  // Ignoring RuntimeExceptions
  
  public class NeverCaught {
   static void f() {
    throw new RuntimeException("From f()");
   }
   static void g() {
    f();
   }
   public static void main(String[] args) {
    g();
   }
  } ///:~
  
  大家已經(jīng)看到,一個RuntimeException(或者從它繼續(xù)的任何東西)屬于一種非凡情況,因為編譯器不要求為這些類型指定違例規(guī)范。
  輸出如下:
  
  java.lang.RuntimeException: From f()
  at NeverCaught.f(NeverCaught.java:9)
  at NeverCaught.g(NeverCaught.java:12)
  at NeverCaught.main(NeverCaught.java:15)
  
  所以答案就是:假若一個RuntimeException獲得到達(dá)main()的所有途徑,同時不被捕捉,那么當(dāng)程序退出時,會為那個違例調(diào)用PRintStackTrace()。
  注重也許能在自己的代碼中僅忽略RuntimeException,因為編譯器已正確實行了其他所有控制。因為RuntimeException在此時代表一個編程錯誤:
  (1) 一個我們不能捕捉的錯誤(例如,由客戶程序員接收傳遞給自己方法的一個空句柄)。
  (2) 作為一名程序員,一個應(yīng)在自己的代碼中檢查的錯誤(如ArrayIndexOutOfBoundException,此時應(yīng)注重數(shù)組的大小)。
  可以看出,最好的做法是在這種情況下違例,因為它們有助于程序的調(diào)試。
  另外一個有趣的地方是,我們不可將Java違例劃分為單一用途的工具。的確,它們設(shè)計用于控制那些討厭的運行期錯誤——由代碼控制范圍之外的其他力量產(chǎn)生。但是,它也非凡有助于調(diào)試某些非凡類型的編程錯誤,那些是編譯器偵測不到的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 田林县| 襄汾县| 花垣县| 元阳县| 涟源市| 湛江市| 佛山市| 铜鼓县| 定结县| 定南县| 古浪县| 固阳县| 永靖县| 达日县| 大同市| 抚顺市| 乐安县| 阿坝| 吴桥县| 台东市| 麻城市| 永嘉县| 滨海县| 柏乡县| 武平县| 都江堰市| 开封县| 荔浦县| 扎兰屯市| 威海市| 丰城市| 汪清县| 鸡西市| 陇川县| 万宁市| 常州市| 宝兴县| 迭部县| 霍林郭勒市| 通化县| 台安县|