我将引用Java语言规范,因为对此很清楚:
本节专门对“可达”一词进行精确的解释。这个想法是,从包含该语句的构造函数,方法,实例初始化程序或静态初始化程序的开头到语句本身必须有某种可能的执行路径。该分析考虑了语句的结构。除了对
while,do和条件表达式的常数值为true的语句 的 特殊处理 外,流分析中不考虑表达式的值。
…
如果满足以下至少一项条件,则while语句可以正常完成:
- while语句是可到达的,并且条件表达式不是值为true的常量表达式。
- 有一个可达的break语句退出while语句。
…
如果非S语句之前的语句可以正常完成,则可以到达非空块(不是交换块)中的所有其他语句S。
然后将以上定义应用于此:
如果方法声明为具有返回类型,则其主体中的每个return语句(第14.17节)都必须具有一个expression。如果方法的主体可以正常完成,则会发生编译时错误(第14.1节)。
换句话说,具有返回类型的方法只能通过使用提供值return的return语句来返回;不允许“掉落尸体的末端”。
请注意,方法可能具有声明的返回类型,但不包含任何返回语句。这是一个例子:
class DizzyDean { int pitch() { throw new RuntimeException("90 mph?!"); }}



