什么时候抛异常什么时候捕捉异常?

之前面试遇到这样一个问题,异常有两种处理方式,一种是直接捕捉try catch,一种是直接往外抛throws,那么这两种方式都是什么情况下使用呢

当时一下没反应过来,工作中大多数都是直接捕获,后面才了解到首先你要弄清楚这个功能的位置:

  • 如果这个方法没有人调用,则一定要捕捉不然就抛到jvm来处理了(比如Controller层一般都是要对异常进行捕捉,该打日志的打,该抛前台的抛)
  • 有其他调用者要使用你这个方法,如果这个异常信息是不需要让调用者知道的就直接捕获,比如时间转换用到SimpleDateFormat则可以直接捕获异常
  • 但如果这个异常调用者是需要知道的就要抛出去让调用者去处理,比如controller层调service业务层,如果业务层逻辑处理失败是需要拿到他失败的原因方便运维,这种情况就要抛异常

对于service层如果有对数据库进行增删改操作的一般会有事务管理,这个时候异常就不能随便捕捉了,不然就会影响事物的回滚(或者捕捉后再抛一个自定义异常)

原文地址:https://www.cnblogs.com/chenglei0718/p/11407447.html

时间: 2024-08-01 07:22:47

什么时候抛异常什么时候捕捉异常?的相关文章

21、捕捉异常和异常的使用原则

package com.exception.demo; public class Take { // 创建类 /** * 1.捕捉异常( 异常处理器大致分为 try-catch 语句快 和 finally 语句块 ) * 2.以下4种情况不会执行finall语句块 * 2.1.在finally语句块发生了异常 * 2.2.在前面的代码中使用了 System.exit() 退出程序 * 2.3.程序所在的线程死亡 * 2.4.关闭CPU * 3.异常的使用原则: * 1.在当前方法中使用 try

python 捕捉异常

Python中的捕捉异常 (try  except ) 语句: try: #把你要执行的代码放进来 ..... ..... except: #比如try上面的代码出现了异常,就会来到这里 #我们可以打印一句话 print ('error') --------------------------------------------------------------- 又或者说 try: #把你要执行的代码放进来 ..... ..... except typeError as reason #类型

编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]

原文:编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误.不要在不恰当的场合下引发异常.重新引发异常时使用inner Exception] 前言 自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过.迄今为止,CLR异常机制让人关注最多的一点就是"效率"问题.其实,这里存在认识上的误区,因为正常控制流程下的代码运行并不会出现问题,只有引发异常时才会带来效率问题.基于这一点,很多开发者已经达成共识:不应将异常机制用于正常控制流中.达成的另一个共识是:CLR异常机制带来

idhttp post 出现exception class EIdSocketError with message 'Socket Error # 10054的解决办法(捕捉异常,防止程序挂掉)

由于项目需要.需要向一个地址提交数据.提交的次数很频繁,但是程序经常raised exception class EIdSocketError with message 'Socket Error # 10054Connection reset by peer.' 造成程序异常,停止工作.    于是找到以下解决办法.Exception捕获不到该异常.需要用EIdException来捕获异常.    IDE环境: Delphi XE3 Version 17.0.4625.53395     IN

java中异常处理机制 throw抛出自定义业务逻辑异常 throws继续抛出 catch捕获后会自动继续抛向调用方法

package com.swift; public class Exception_TestC { public static void main(String[] args) { /* * 第5题: 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个 * 方法a,请在这个方法中调用b,然后抛出异常.在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕 捉异常的信息.Java异常的处理机制 * * 如果try或cat

Java try-catch自定义捕捉异常

题目要求:输入数值,90-100输出“优”,80-90输出“良”,70-80输出“中”,60-70输出“及格”,0-60输出“不及格”,输入其他捕捉异常并提示相应信息. 代码如下: 1 import java.util.Scanner; 2 3 @SuppressWarnings("serial") 4 //自定义异常类 5 class TryException extends Exception 6 { 7 /** 8 * 9 */ 10 private static final l

12.异常-覆盖时的异常特点(总结异常信息)

1子沿袭了父就只能用父的2个异常 一个是AException另一个是Bxcetion 1.getMessage()返回该异常的详细描述字符串 2.printStackTrace()将该异常的跟踪栈信息输出到标准错误输出. 3.prinStackTrace(PrintStream s)将该异常的跟踪栈信息输出到指定输出流 4.getStackTrace()返回该异常的跟踪栈信息 用户自定义异常都应该继承Exception基类,如果希望自定义Runtime异常,应该继承RuntimeExceptio

(转)异常设计----何使用异常的原则

作者:Bill Venners著,chenkw  译 本文选自:www.javaresearch.org 摘要 本文是设计技术专栏文章,讨论有关异常设计的问题.本文关注何时使用异常,并举例演示异常的恰当使用.此外,本文还提供一些异常设计的基本原则. 五个月前,我开始撰写有关设计对象的文章.本文是设计文技术系列文章的延续,讨论了有关错误报告和异常的设计原则.我假设读者已经知道什么是异常,以及异常是如何工作的.你若想回顾一下异常方面的知识,请阅读本文的姐妹篇<Java异常>.  异常的好处    

Python——异常(内置异常以及应用场景)

""" 什么是异常: 1.异常指出了我们的程序有错误 2.有些异常也会在一些合法的情况下发生,比如用户名密码错误,银行卡号不存在 3.内置异常的名字都是以Error结尾:ZeroDivisionError,IndexError,SyntaxError 4.所有异常类都是继承于Exception,(扩展BaseException) 5.当一个异常发生的时候,会立即停止程序的执行,除非正确的处理这个异常 6.异常是一个对象,并且可以继承(通过继承Exception类来实现自己的异