Локальная переменная не инициализирована, но все же программа компилируется
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 ответа:
Если вы используете
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 игнорировать его.
Решение очевидно. Исправьте ошибку компиляции.