2012-08-26 112 views
4

如果我試圖打印「a」的值,爲什麼它顯示錯誤?爲什麼異常會成爲錯誤?爲什麼這個異常不會被打印?爲什麼它顯示錯誤?

class Ankit1 
{ 
    public static void main(String args[]) 
    { 
     float d,a; 
     try 
     { 
      d=0; 
      a=44/d; 
      System.out.print("Its not gonna printed"+a); //if Exception not occurs then it will print and it will ot goto catch block 
     } 
     catch(ArithmeticException e) 
     { 
      System.out.println("Print hoga"+a);//why error come?? 
     } 
    } 
} 
+1

你應該張貼的錯誤,這樣我們就可以幫助你更好。 – elyashiv

+0

後續問題在這裏:http://stackoverflow.com/questions/12130800/why-the-exception-is-not-triggered-here –

+0

後續是略有不同,稍有關係,我有點高興允許兩者。 – Kev

回答

2

a未初始化爲d
初始化默認值a

float d = 0.0f; 
float a = 0.0f; 

或使用Float代替float

Float a = null; 
+0

未定義變量或類名稱:ae System.out.println(「Print hoga」+ ae.getMessage()); //它顯示此錯誤 – Ankit

+1

嘗試'e.getMessage()' – SiB

+0

e.printStackTrace() – Ilya

5

如果看到錯誤

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The local variable a may not have been initialized 

    at your.package.Ankit1.main(Ankit1.java:18) 

其中明確規定The local variable a may not have been initialized

你得到這個錯誤作爲您的變量a未初始化。

如果你要打印的錯誤消息,請嘗試打印... e.getMessage()p.printStackTrace()爲完整的堆棧跟蹤。

爲了解決這個問題簡單的初始化a有一些像這樣的價值...

float a = 0; 
+0

初始化後未定義變量或類名稱:ae System.out.println(「Print hoga」+ ae.getMessage()); – Ankit

+0

我改正了...嘗試'System.out.println(「Print hoga」+ e.getMessage()); '但是在初始化'a'之後也是這樣。 – SiB

+0

非常感謝你的工作......非常感謝 – Ankit

3

a沒有任何價值。由於例外發生在44/d;聲明爲a可能沒有值。

Ankit1.java:14: variable a might not have been initialized 
      System.out.println("Print hoga"+a);//why error come?? 

它是因爲變量a沒有被初始化。

也不會有任何ArithmeticException拋出這個44/d語句,因爲它有浮動操作,所以有否除零例外取而代之無限將是結果。
更多看到here

+0

爲什麼它顯示錯誤? – Ankit

+0

嗯,所以它成爲錯誤? – Ankit

+1

@Ankit是的。打印一個未被初始化的變量會導致錯誤。 –

3

「如果我試圖打印的價值‘被初始化前的’爲什麼它的示值誤差?

因爲被零除拋出異常。

對於打印錯誤,您可以打印異常消息或整個堆棧跟蹤:

catch(ArithmeticException e) 
{ 
    System.out.println(e.getMessage()); 
    e.printStackTrace(); 
} 
1

你定義float d,a;但您並未初始化它們。如果你以後不用,在使用它們之前,這是一個編譯時錯誤。
在你try你這樣做:
d=0;
a=44/d;

但既然你在try初始化它們並訪問他們catch裏面的編譯器抱怨a未初始化。如果替換爲d,您也會得到相同的錯誤。
爲了解決這個問題嗎:

float d = 0,a = 0;

始終初始化局部變量

+1

非常感謝你,先生 – Ankit

+0

不客氣,先生! :) – Cratylus