@David
Heffernan有正确答案。JLS规范在第14.17节中讨论了return语句的行为(包括return语句如何与finally块交互)。从那里复制(重点是我的):
一个带有expression的return语句试图将控制权转移到包含它的方法的调用者;expression的值成为方法调用的值。
更准确地说,执行这样的return语句首先会评估expression
。如果对表达式的求值由于某种原因而突然完成,则return语句由于该原因而突然完成。如果对expression的求值正常完成,产生一个值V,则return语句突然完成,原因是返回值为V。如果该表达式的类型为float且不是FP-
strict(§15.4),则该值可以是float值集或float-extended-
exponent值集(第4.2.3节)的元素。如果表达式的类型为double,并且不受FP限制,则该值可以是double值集或double-
expended指数值集的元素。可以看出,return语句总是突然完成。
前面的描述说的是“试图转移控制权”,而不仅仅是“转移控制权”,因为
如果方法或构造函数中的任何try语句(第14.20节)的try块包含return语句,则这些try语句的所有finally子句都会在控制权转移到方法或构造函数的调用者之前,按从内到外的顺序执行
。finally子句的突然完成可能会破坏由return语句启动的控制权的转移。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)