局部变量未初始化,但仍在编译程序
Local variable not initialized, but still program compiling
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() 的注释,则会出现编译错误。
如果用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 可以尝试 运行 一个程序编译错误。这是通过 "compiling" 方法实现的,将编译错误转化为字节码,在调用时会抛出异常。当您注释掉对错误方法的调用时,它不会被调用……自然地……并且不会抛出异常。
但底线是您确实遇到了编译错误。你刚刚告诉 IDE 忽略它。
解决方案很明显。修复编译错误
它不编译。这是我编译的输出:
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
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() 的注释,则会出现编译错误。
如果用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 可以尝试 运行 一个程序编译错误。这是通过 "compiling" 方法实现的,将编译错误转化为字节码,在调用时会抛出异常。当您注释掉对错误方法的调用时,它不会被调用……自然地……并且不会抛出异常。
但底线是您确实遇到了编译错误。你刚刚告诉 IDE 忽略它。
解决方案很明显。修复编译错误
它不编译。这是我编译的输出:
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