局部变量未初始化,但仍然是程序编译

时间:2015-10-29 07:40:41

标签: java variables local

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(),那么我会收到编译错误。

2 个答案:

答案 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