同一范围内同名的局部变量,IDE显示错误,但是当我运行程序时,没有运行时错误结果

我知道在同一范围内声明同名的局部变量是违法的。 我写了这个非常简单的类,是的,IDE确实在int i = 10;旁边显示错误int i = 10; 。 但是当我运行代码时,一切似乎都很好。

 public class VariableWithSameName { static void myMethod(int i){ int i = 10; //error: variable i already defined in method } public static void main(String[] args){ } } 

只有当我调用myMethod时才会发生运行时错误。

 public class VariableWithSameName { static void myMethod(int i){ int i = 10; //error: variable i already defined in method } public static void main(String[] args){ myMethod(1); } } 

线程“main”中的exceptionjava.lang.RuntimeException:无法编译的源代码 – 变量i已在方法myMethod(int)中定义

那么为什么运行第一个版本不会导致运行时错误?

只需添加我的2美分,如果您想知道编译错误的类是如何编译的,请看一下这里https://stackoverflow.com/a/7590454/6785908

IDE的内部编译器 – 至少在某些情况下 – 能够继续使用构建,即使某些类没有完全编译。 如果可能的话,它甚至会为破碎的类生成类文件,生成一旦调用就抛出exception的方法。

因为在运行时。 你从来没有调用你的方法“VariableWithSameName”,这就是原因。 只有在系统运行错误时才会出现运行时错误。 但编译时错误将确定编译期间可能发现的所有可能错误

这是编译时错误。 据推测,您在引入错误之前已成功编译,并且仍在执行.class文件。