什么时候该抛出异常?什么时候该捕获异常?对于这两种方式有些模糊,老师说方法有返回值应该抛出异常,无返回值应该捕获异常,但有的时候业务逻辑不同又导致抛出或捕获不同,希望各路大神能给予解答

解决方案 »

  1.   

    对于方法的调用(不考虑远程调用),一般情况下,有两种结果:
    1.正常返回
    2.错误返回
    其中(错误返回)可以用返回值表示错误(比如-1,null等),也可以用抛出异常表示错误,
    但两者不可能同时出现,也就是不存在调用方法后即得到返回值,又得到异常信息的情况。所以,解答你第一个问题,什么时候该抛出异常?
    回答:在程序需要错误返回并且不想用返回值表示错误的时候,需要抛出异常。第二个问题:什么时候该捕获异常?
    回答:在你认为你的程序可以正确的识别并处理这个异常信息的时候,可以捕获该异常并处理掉。
    否则,就交给上一层来处理(抛出);
    如果一直向上抛,最终会抛给系统(你的程序是由系统启动的)导致系统异常(这时一般会结束程序)。所以实际开发中,一般在框架层对标准异常进行处理。并且在编码规范中规定业务异常的抛出和处理方式。
    如果还有问题可以来我空间提问(www.java123.vip)
      

  2.   

    1、如果你不能处理异常,不要捕获该异常。
    2、如果要捕获,应在离异常源近的地方捕获它。
    3、用自定义的异常类,不要每次需要抛出异常的时候都抛出java.lang.Exception。方法的调用者可以通过throws知道有哪些异常需要处理--所以它是自我描述的
    4、如果你编写业务逻辑,对于终端用户无法修复的错误,系统应该抛出非检查的异常(unchecked exception);如果你编写一个第三方的包给其他的开发人员用,对于不可修复的错误要用需要检查的异常(checked exception)
      

  3.   

    和返回值无关,看你对于这个异常要怎么处理。
    能处理或者程序需要继续执行,try-catch
    无法处理,或者导致程序、任务无法继续,则抛出。
    一般顶层的controller会统一接收,然后输出打印,返回给前台。