为什么不打印此例外?为什么会出现错误?

时间:2012-08-26 13:49:57

标签: java exception

如果我正在尝试打印“a”的值,为什么会出现错误?为什么异常会成为错误?

class Ankit1
{
    public static void main(String args[])
    {
        float d,a;
        try
        {
            d=0;
            a=44/d;
            System.out.print("It's not gonna print: "+a); // if exception doesn't occur then it will print and it will go on to the catch block
        }
        catch (ArithmeticException e)
        {
            System.out.println("a:" + a); // why is this an error??
        }
    }
}

5 个答案:

答案 0 :(得分:6)

如果看到错误

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;

答案 1 :(得分: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没有被初始化。

也没有为这个44 / d语句抛出任何ArithmeticException,因为它有浮点运算所以没有Divide-by -zero Exception而不是无限将是结果。
有关更多信息,请参阅here

答案 2 :(得分:3)

  

"如果我正在尝试打印" a"为什么会出现错误?

因为除以零会在初始化之前抛出异常。

要打印错误,您可以打印异常消息或整个堆栈跟踪:

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

答案 3 :(得分:2)

a未初始化 初始化da

的默认值
float d = 0.0f;  
float a = 0.0f;  

或使用Float代替float

Float a = null;  

答案 4 :(得分:1)

您定义float d,a;但未初始化它们。如果您以后也没有,在使用它们之前,这是一个编译时错误 在您的try中执行:
d=0;
a=44/d;

但是,由于您在try中初始化它们并且在catch内访问它们,编译器会抱怨a未初始化。如果您替换为d,您也会收到同样的错误 要解决这个问题:

float d = 0,a = 0;

始终初始化您的本地变量