Java 局部变量未初始化,但仍在编译程序
我知道的事实是,局部变量在使用之前必须初始化。这里Java 局部变量未初始化,但仍在编译程序,java,variables,local,Java,Variables,Local,我知道的事实是,局部变量在使用之前必须初始化。这里d和i是局部变量。您可以看到我没有初始化它们为什么我仍然可以编译程序并能够运行它? 如果取消对func()的通信,则会出现编译错误 如果使用javac编译它,它不会编译: public class Test { public static void main(String[] args) { System.out.println("started"); //func(); } static vo
d
和i
是局部变量。您可以看到我没有初始化它们为什么我仍然可以编译程序并能够运行它?
如果取消对func()的通信,则会出现编译错误 如果使用
javac
编译它,它不会编译:
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);
}
}
我的猜测是您正在使用IDE,并且您在过去的某个时候告诉IDE,尝试运行带有编译错误的程序是可以的。这是通过将具有编译错误的方法“编译”为字节码来实现的,字节码在调用时抛出异常。当您注释掉对错误方法的调用时,它不会被调用。。。当然。。。并且不会抛出异常 但底线是,您确实得到了一个编译错误。你刚刚告诉IDE忽略它
解决办法是显而易见的。修复编译错误。它不编译。下面是我编译的输出,请尝试:
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可能会使用技巧来执行不可编译的代码(只要不可编译的部分未“运行”),但如果使用javac编译,则会出现错误。它仍然无法编译。@JudeNiroshan,根据我的经验,这是不可能的。必须初始化局部变量。请检查两次。如果你真的能运行这个,它的输出在哪里?@MadaraUchiha当OP回答他在这里被问到的问题时,如果OP回答了他被问到的问题,他的问题将有资格被认真考虑。这不是解决问题的人,每个人都已经回答了问题的评论。请只发布答案。这是解决方案。事实上,这是唯一的解决办法。这是一个答案。伙计。
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