return语句在带返回值方法中既终止执行又必须返回匹配类型的值,所有执行路径须有有效return,其后代码不可达,表达式在返回前求值且具副作用。

在带返回值的方法中,return语句不仅用于结束方法执行,还必须提供与声明类型兼容的值。它一旦执行,方法立即退出,后续代码不再运行。
return 必须返回匹配类型的值
方法声明了返回类型(如 int、String、boolean 或自定义类),则每个 return 语句都必须返回该类型或其子类型(满足协变规则)的值。
-
错误示例:声明为
public int getValue(),却写return "123";或return null;—— 编译不通过 -
正确示例:
return 42;、return (int) Math.ceil(3.7);、return calculate();(前提是calculate()返回int)
所有执行路径都必须有 return
编译器会检查方法中**每一条可能的执行路径**是否最终都会到达一个有效的 return 语句。哪怕逻辑上“不可能”走到某分支,只要语法上存在无返回的出口,就报错。
- 含
if但无else:若if块内有return,但外部没写,编译失败 - 循环后直接跟
return是安全的;但若循环内只有条件return,且无循环外兜底,也会报错 - 可使用抛出异常作为替代返回路径,如
throw new UnsupportedOperationException();,此时无需return
return 执行即终止,不可达代码被禁止
在 return 语句之后写的任何语句,编译器判定为“不可达代码(unreachable code)”,直接拒绝编译。
- 例如:
return 5; System.out.println("hello");→ 第二行标红报错 - 即使
return在try中,且finally里也有return,也只以finally的为准,但try块中return后面的代码仍属不可达 - 注意:空的
while(true)后加return不算不可达,因为编译器无法确定它是否真不退出
表达式求值与返回时机
return 后的表达式会在退出前完成求值,且结果被复制(基本类型)或引用传递(对象)给调用方。若表达式含副作用(如方法调用、赋值),它们一定执行完毕才退出。
- 例如:
return a++ + compute();→ 先算a++(返回旧值),再调用compute(),最后相加并返回 - 若
compute()抛异常,则整个return失败,方法不会返回值,而是向上抛出异常 - 对象引用返回的是地址副本,修改返回后的引用不影响原对象状态,但通过该引用修改对象内部字段会影响原对象















