国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 解析Java中未被捕獲的異常以及try語句的嵌套使用

解析Java中未被捕獲的異常以及try語句的嵌套使用

2020-01-07 14:10goldensun JAVA教程

這篇文章主要介紹了Java中未被捕獲的異常以及try語句的嵌套使用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

Java未被捕獲的異常
在你學(xué)習(xí)在程序中處理異常之前,看一看如果你不處理它們會有什么情況發(fā)生是很有好處的。下面的小程序包括一個故意導(dǎo)致被零除錯誤的表達式。

?
1
2
3
4
5
6
class Exc0 {
  public static void main(String args[]) {
    int d = 0;
    int a = 42 / d;
  }
}

當(dāng)Java運行時系統(tǒng)檢查到被零除的情況,它構(gòu)造一個新的異常對象然后拋出該異常。這導(dǎo)致Exc0的執(zhí)行停止,因為一旦一個異常被拋出,它必須被一個異常處理程序捕獲并且被立即處理。該例中,我們沒有提供任何我們自己的異常處理程序,所以異常被Java運行時系統(tǒng)的默認處理程序捕獲。任何不是被你程序捕獲的異常最終都會被該默認處理程序處理。默認處理程序顯示一個描述異常的字符串,打印異常發(fā)生處的堆棧軌跡并且終止程序。

下面是由標(biāo)準(zhǔn)javaJDK運行時解釋器執(zhí)行該程序所產(chǎn)生的輸出:

?
1
2
java.lang.ArithmeticException: / by zero
at Exc0.main(Exc0.java:4)


注意,類名Exc0,方法名main,文件名Exc0.java和行數(shù)4是怎樣被包括在一個簡單的堆棧使用軌跡中的。還有,注意拋出的異常類型是Exception的一個名為ArithmeticException的子類,該子類更明確的描述了何種類型的錯誤方法。本章后面部分將討論,Java提供多個內(nèi)置的與可能產(chǎn)生的不同種類運行時錯誤相匹配的異常類型。

堆棧軌跡將顯示導(dǎo)致錯誤產(chǎn)生的方法調(diào)用序列。例如,下面是前面程序的另一個版本,它介紹了相同的錯誤,但是錯誤是在main( )方法之外的另一個方法中產(chǎn)生的:

?
1
2
3
4
5
6
7
8
9
class Exc1 {
  static void subroutine() {
    int d = 0;
    int a = 10 / d;
  }
  public static void main(String args[]) {
    Exc1.subroutine();
  }
}

默認異常處理器的堆棧軌跡結(jié)果表明了整個調(diào)用棧是怎樣顯示的:

?
1
2
3
java.lang.ArithmeticException: / by zero
at Exc1.subroutine(Exc1.java:4)
at Exc1.main(Exc1.java:7)


如你所見,棧底是main的第7行,該行調(diào)用了subroutine( )方法。該方法在第4行導(dǎo)致了異常。調(diào)用堆棧對于調(diào)試來說是很重要的,因為它查明了導(dǎo)致錯誤的精確的步驟。

Java try語句的嵌套
Try語句可以被嵌套。也就是說,一個try語句可以在另一個try塊內(nèi)部。每次進入try語句,異常的前后關(guān)系都會被推入堆棧。如果一個內(nèi)部的try語句不含特殊異常的catch處理程序,堆棧將彈出,下一個try語句的catch處理程序?qū)z查是否與之匹配。這個過程將繼續(xù)直到一個catch語句匹配成功,或者是直到所有的嵌套try語句被檢查耗盡。如果沒有catch語句匹配,Java的運行時系統(tǒng)將處理這個異常。下面是運用嵌套try語句的一個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// An example of nested try statements.
class NestTry {
  public static void main(String args[]) {
    try {
      int a = args.length;
      /* If no command-line args are present,the following statement will generate a divide-by-zero exception. */
      int b = 42 / a;
      System.out.println("a = " + a);
      try { // nested try block
        /* If one command-line arg is used,then a divide-by-zero exception will be generated by the following code. */
        if(a==1) a = a/(a-a); // division by zero
        /* If two command-line args are used,then generate an out-of-bounds exception. */
        if(a==2) {
          int c[] = { 1 };
          c[42] = 99; // generate an out-of-bounds exception
        }
      } catch(ArrayIndexOutOfBoundsException e) {
        System.out.println("Array index out-of-bounds: " + e);
      }
    } catch(ArithmeticException e) {
      System.out.println("Divide by 0: " + e);
    }
  }
}

如你所見,該程序在一個try塊中嵌套了另一個try塊。程序工作如下:當(dāng)你在沒有命令行參數(shù)的情況下執(zhí)行該程序,外面的try塊將產(chǎn)生一個被零除的異常。程序在有一個命令行參數(shù)條件下執(zhí)行,由嵌套的try塊產(chǎn)生一個被零除的錯誤。因為內(nèi)部的塊不匹配這個異常,它將把異常傳給外部的try塊,在那里異常被處理。如果你在具有兩個命令行參數(shù)的條件下執(zhí)行該程序,由內(nèi)部try塊產(chǎn)生一個數(shù)組邊界異常。下面的結(jié)果闡述了每一種情況:

?
1
2
3
4
5
6
7
8
C:\>java NestTry
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One
a = 1
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One Two
a = 2
Array index out-of-bounds: java.lang.ArrayIndexOutOfBoundsException

當(dāng)有方法調(diào)用時,try語句的嵌套可以很隱蔽的發(fā)生。例如,你可以把對方法的調(diào)用放在一個try塊中。在該方法內(nèi)部,有另一個try語句。這種情況下,方法內(nèi)部的try仍然是嵌套在外部調(diào)用該方法的try塊中的。下面是前面例子的修改,嵌套的try塊移到了方法nesttry( )的內(nèi)部:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* Try statements can be implicitly nested via calls to methods. */
class MethNestTry {
  static void nesttry(int a) {
    try { // nested try block
      /* If one command-line arg is used,then a divide-by-zero exception will be generated by the following code. */
      if(a==1) a = a/(a-a); // division by zero
      /* If two command-line args are used,then generate an out-of-bounds exception. */
      if(a==2) {
        int c[] = { 1 };
        c[42] = 99; // generate an out-of-bounds exception
      }
    } catch(ArrayIndexOutOfBoundsException e) {
      System.out.println("Array index out-of-bounds: " + e);
    }
  }
 
  public static void main(String args[]) {
    try {
      int a = args.length;
      /* If no command-line args are present,the following statement will generate a divide-by-zero exception. */
      int b = 42 / a;
      System.out.println("a = " + a);
      nesttry(a);
    } catch(ArithmeticException e) {
      System.out.println("Divide by 0: " + e);
    }
  }
}

該程序的輸出與前面的例子相同。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 超碰一区二区三区 | 在线国产视频 | 免费久久久久 | 欧美午夜一区二区福利视频 | 亚洲一区二区三区中文字幕 | 国产精品中文字幕在线观看 | 亚洲欧美网址 | 免费观看视频毛片 | 毛片综合 | 成人在线 | 精品中文字幕一区 | 青青草免费在线视频 | 精品美女久久久 | 在线观看91| 亚洲视频免费观看 | 中文字幕av一区二区 | 久久久国产一区二区三区 | 波多野结衣三区 | 欧美亚洲视频在线观看 | 欧美在线观看视频一区二区 | 国产精品亚洲第一区在线暖暖韩国 | 欧美一级二级三级视频 | 亚洲一区二区av | av一区二区三区 | 国产精品永久久久久久久久久 | 久久九| 91极品视频在线观看 | 亚洲成人av在线 | 黄色在线 | 亚洲国产精品久久久久 | 亚洲日本国产 | 国产欧美久久一区二区三区 | 久草精品在线观看 | 四虎永久在线观看 | 日韩国产一区二区 | 久久99这里只有精品 | 欧美一级免费看 | 午夜久久乐 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品一区久久 | 亚洲欧美中文字幕 |