Java中final关键字引发unreachable statement错误,为何无法输出Hello World?
编译错误:unreachable statement 原因解析
你代码里用final修饰了a和b,这俩变量会被编译器当成编译期常量,它们的10和20在编译阶段就固定死了。
再看循环条件while(a > b),10 > 20永远是false,编译器能在编译期直接判断出这个循环的代码块(也就是System.out.print("Message");那一行)永远不会被执行。而Java语法明确规定:不可达的语句不能出现在代码里,所以编译器直接抛出了error: unreachable statement的编译错误。
至于你问为什么无法输出Hello World——因为程序连编译这关都没过,根本没生成可运行的字节码,自然没法运行起来输出内容。其实Hello World那行代码本身是完全可达的,只要把编译错误解决掉,它就能正常输出。
修复方案
- 要是不需要这个循环,直接删掉整个
while代码块就行,代码就能正常编译运行; - 要是必须保留循环,就去掉
a和b的final修饰符,让它们变成普通变量。这样编译器没法在编译期确定它们的大小关系,循环体就会被判定为可达,编译就能通过。
示例1:删除循环后的代码
public class Main { public static void main(String[] args) { final int a=10,b=20; System.out.println("Hello World"); } }
示例2:保留循环去掉final的代码
public class Main { public static void main(String[] args) { int a=10,b=20; while(a>b){ System.out.print("Message"); } System.out.println("Hello World"); } }
内容的提问来源于stack exchange,提问作者VIJAY KUMAR
相关产品推荐
相关产品推荐

