2011-05-11 82 views
2

我有以下代碼:關於在Java中捕獲異常的問題?

public static void main(String[] args) { 
     try { 
      int d1 = 3; 
      int d2 = 0; 
      int d = d1/d2; 
     } catch (Exception ex) { 
      System.out.println("Exception"); 
     } 
    } 

當這個代碼運行,很明顯會發生異常。 不過,如果我更改代碼如下:

public static void main(String[] args) { 
     try { 
      double d1 = 3; 
      double d2 = 0; 
      double d = d1/d2; 
     } catch (Exception ex) { 
      System.out.println("Exception"); 
     } 
    } 

那麼異常不會拋出。我真的不明白。 任何人都可以詳細說明一下嗎?

+0

作業後d的值在哪裏? – Gal 2011-05-11 11:13:36

+0

在第二個片段中,什麼是System.out.println(d) – DaveH 2011-05-11 11:13:45

+0

的輸出我很欣賞SO海報試圖幫助某人找出答案。 – hotshot309 2012-09-26 16:16:24

回答

8

由於除以0.0將產生NAN或+/-無窮大,這不是一個例外。

2

當您執行整數除以0時,您可以得到一個異常,因爲沒有爲此定義的行爲。

在IEEE標準中有一個雙重劃分的定義行爲。

2

在第二個示例中,不會發生異常,因爲雙數據類型對於正無窮大具有特殊值。

將3d除以0d將產生特殊值Double.POSITIVE_INFINITY。

0

你除以double而不是int值。如果你得到了異常,所以你必須除以int(0)變量。如果你除以float是你得到的無限無例外。