多态,父类引用接受子类对象
这么开发是不ok的。为什么? 因为你写这个方法的时候,不确定a/b是否会有异常,那别人调用你的方法的时候,万一传的参数不正确,那不是挂了么。 而且别人只是去调用你的方法,不会仔细去看你方法里具体是怎么写的。 那这样别人就不确定到底是try还是不try。
所以我们应该给定义 除0这个方法去抛一个异常 给这个除0 的方法 后面加一个 throws Exception,说明一下,这个方法可能会出现问题。这样别人调用的时候,如果没有进行try-catch,的话,编译的时候就会报错。提示你: 需要调用的时候对其进行异常的处理。
所以正确的代码是:
注意的一点是:你调用一个已经throws的方法的时候,你可以做的是,继续在你这个方法上throws,如果你的方法还有别人调用的话,你可以继续抛,你还可以try-catch。
try-catch中的return问题:
我们先来说一下几种错误的写代码的情况:
错误:try中有return的情况下,catch或者finally中有return 方法最后还return。视为错误:
只要catch或者finally中有return。 方法就结束了。不会再return什么东西了。
try中有return,catch-finally中都没有return的话,try块里无论有没有return,方法最后都得return
所以最后(catch的花括号里面,或者finally的花括号里面,或者finally的花括号外面)必须加一个return语句
这段代码,怎么执行,怎么理解。
首先调用div这个方法,4/0直接抛异常,try块里的syso不执行。(原谅我是一个eclipse使用者,idea的sout下意识的直接写出了syso)。然后异常了,就走catch。输出两条语句。(哈哈哈,catch-语句块)。然后走finally。输出“finally---语句块”,然后这个方法返回了0.
所以主函数 int div 中的 div 的打印值是0
所以整体的输出是:
然后再看看这个:try-catch里都有return。这个怎么执行
首先4/0异常,try里syso不打印,然后走catch,打印两条语句。catch中的return 111 返回给主函数中的div。所以执行结果是
然后加上finally:
结果和上面的区别是 走了finally---语句块,最后输出 div = 222
try中有return.那如果catch中return了,finally中没有return呢?
总之一句话,catch和finally中如果都有return。那么就走finally中的,如果finally中没有return,那就走catch的return。
那如果try中没有异常呢?try中没有异常的话,如果有return的话,那就return这个值进了临时栈,这时候因为没有异常,所以不走catch,直接进finally,如果finally里有return的话,那就返回finally中return这个值,如果finally中没有,方法结束时候有return。那就返回方法结束时的那个return值。如果finally中没有return,方法结束也没有return,那这个时候catch里面必须要有return了。虽然没有异常 catch不走,但是语法是这样的,必须要有一个return。所以这时候try里没有异常,有return,catch里有return,返回的就是try里那个return值。
记住,try中的return永远是把值压入临时栈里。方法最后还要走catch(try中有异常的话),还要走finally,还要走最后的return(如果有的话)。所以整体方法返回的是有效的return的值。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!