Локальная переменная не инициализирована, но все же программа компилируется


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 и i - локальные переменные. Вы можете видеть, что я не инициализировал их. Почему я все еще могу скомпилировать программу и запустить ее?

Если я отключаю функцию func () , то я получаю ошибку компиляции.

2 4

2 ответа:

Если вы используете 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 игнорировать его.


Решение очевидно. Исправьте ошибку компиляции.

Он не компилируется. Вот вывод из моей компиляции try:

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