问题描述
发现这样一个方法publicStringcreateJson(){try{JSONObjectjsonObject=newJSONObject();jsonObject.put("id","1");jsonObject.put("name","李磊");jsonObject.put("age",30);returnjsonObject.toString();}catch(Exceptione){e.printStackTrace();}return"";}
这其中两个return怎么解释,是第一个return直接就结束方法了么,不是有返回值的return,完事儿后应该继续向下执行吗,求高人指点啊
解决方案
解决方案二:
第1个return很好理解吧,第2个return是当你catch到异常的时候,在catch块结束后执行的。因为异常发生的可能是在第一个return语句之前(这分代码中如果发生异常,则我认为一定是发生在第一个return之前)
解决方案三:
这里编译器认为trycatch里的return有可能走不到,所以第二个return是有机会走的,就和if判断一样。
解决方案四:
引用2楼sca4441479的回复:
这里编译器认为trycatch里的return有可能走不到,所以第二个return是有机会走的,就和if判断一样。
道理同上,你要是发生异常了..catch之后呢?肯定需要一个return的啦
解决方案五:
publicStringcreateJson(){JSONObjectjsonObject=null;try{jsonObject=newJSONObject();jsonObject.put("id","1");jsonObject.put("name","李磊");jsonObject.put("age",30);}catch(Exceptione){e.printStackTrace();}returnnull!=jsonObject?jsonObject.toString():"";}
也可以这么写,估计好理解点
解决方案六:
一楼正确。如果没有异常,则执行returnjsonObject.toString(),第二个return不可达。如果在第一个return之前发生异常,最终将执行return"";
解决方案七:
《ThinkinginJava》一书中原话:return关键字的用法,它包括两方面:首先,它代表“已经做完,离开此方法”。其次,如果此方法产生了一个返回值,这个值要放在return语句后面。
解决方案八:
我明白了……
解决方案九:
那为什么第二个return不写在catch里
解决方案十:
引用8楼shmy110的回复:
那为什么第二个return不写在catch里
trycatch完整的是少个finally{}的,finally{}是最终无论如何都执行的.return写在try里是正常执行想要的返回结果catch里是发生异常时返回的结果.但是有时候并非上述两种情况就可以概括所有,所以写在catch外的return类似finally里的return,就是如果try里面没有正常执行,那么不管有没有发生异常都要执行最下面的return,这个return写在finally中你就能懂了.
解决方案十一:
引用9楼nich002的回复:
Quote: 引用8楼shmy110的回复:
那为什么第二个return不写在catch里trycatch完整的是少个finally{}的,finally{}是最终无论如何都执行的.return写在try里是正常执行想要的返回结果catch里是发生异常时返回的结果.但是有时候并非上述两种情况就可以概括所有,所以写在catch外的return类似finally里的return,就是如果try里面没有正常执行,那么不管有没有发生异常都要执行最下面的return,这个return写在finally中你就能懂了.
已秒懂
解决方案十二:
你的基础有点差啊当其中一个return返回之后剩下的代码就不会执行了