如果我正在尝试打印“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??
}
}
}
答案 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
未初始化
初始化d
和a
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;
始终初始化您的本地变量