B{i}
我知道的事实是局部变量必须在使用之前初始化。这里public class Test {
public static void main(String[] args) {
System.out.println("started");
//func();
}
static void func(){
double d;
int i;
System.out.println("d ="+d);
System.out.println("i ="+i);
}
}
和d
是局部变量。你可以看到我没有初始化它们。 为什么我仍然可以编译程序并运行它?
如果我取消提交 func(),那么我会收到编译错误。
答案 0 :(得分:4)
如果使用javac
进行编译,则无法编译:
stephen@blackbox tmp]$ cat > Test.java
public class Test {
public static void main(String[] args) {
System.out.println("started");
//func();
}
static void func(){
double d;
int i;
System.out.println("d ="+d);
System.out.println("i ="+i);
}
}
[stephen@blackbox tmp]$ javac Test.java
Test.java:12: error: variable d might not have been initialized
System.out.println("d ="+d);
^
Test.java:13: error: variable i might not have been initialized
System.out.println("i ="+i);
^
2 errors
[stephen@blackbox tmp]$
我的猜测是你正在使用IDE,并且在过去的某个时刻告诉IDE,尝试运行编译错误的程序是可以的。这是通过"编译"实现的。将编译错误转换为字节码的方法,在调用时抛出异常。当您注释掉对错误方法的调用时,它不会被调用...自然......并且异常不会被抛出。
但最重要的是你得到了编译错误。你刚刚告诉IDE忽略它。
解决方案很明显。修复编译错误。
答案 1 :(得分:1)
它没有编译。这里编译的输出尝试:
Test.java:12: error: variable d might not have been initialized
System.out.println("d ="+d);
^
Test.java:13: error: variable i might not have been initialized
System.out.println("i ="+i);
^
2 errors