本文翻译自:Can I catch multiple Java exceptions in the same catch clause?

In Java, I want to do something like this: 在Java中,我想做这样的事情:

try {...
} catch (/* code to catch IllegalArgumentException, SecurityException, IllegalAccessException, and NoSuchFieldException at the same time */) {someCode();
}

...instead of: ...代替:

try {...
} catch (IllegalArgumentException e) {someCode();
} catch (SecurityException e) {someCode();
} catch (IllegalAccessException e) {someCode();
} catch (NoSuchFieldException e) {someCode();
}

Is there any way to do this? 有没有办法做到这一点?


#1楼

参考:https://stackoom.com/question/EfRu/我可以在同一个catch子句中捕获多个Java异常吗


#2楼

Not exactly before Java 7 but, I would do something like this: 不完全是在Java 7之前,但我会做这样的事情:

Java 6 and before Java 6和之前的版本

try {//.....
} catch (Exception exc) {if (exc instanceof IllegalArgumentException || exc instanceof SecurityException || exc instanceof IllegalAccessException || exc instanceof NoSuchFieldException ) {someCode();} else if (exc instanceof RuntimeException) {throw (RuntimeException) exc;     } else {throw new RuntimeException(exc);}}

Java 7 Java 7

try {//.....
} catch ( IllegalArgumentException | SecurityException |IllegalAccessException |NoSuchFieldException exc) {someCode();
}

#3楼

A cleaner (but less verbose, and perhaps not as preferred) alternative to user454322's answer on Java 6 (ie, Android) would be to catch all Exception s and re-throw RuntimeException s. 用户454322对Java 6(即Android)的回答更清晰(但不那么冗长,也许不是首选)将是捕获所有Exception并重新抛出RuntimeException This wouldn't work if you're planning on catching other types of exceptions further up the stack (unless you also re-throw them), but will effectively catch all checked exceptions. 如果您计划在堆栈中进一步捕获其他类型的异常(除非您也重新抛出它们),这将无法工作,但会有效地捕获所有已检查的异常。

For instance: 例如:

try {// CODE THAT THROWS EXCEPTION
} catch (Exception e) {if (e instanceof RuntimeException) {// this exception was not expected, so re-throw itthrow e;} else {// YOUR CODE FOR ALL CHECKED EXCEPTIONS}
}

That being said, for verbosity, it might be best to set a boolean or some other variable and based on that execute some code after the try-catch block. 话虽如此,为了详细说明,最好设置一个布尔值或其他变量,并根据它在try-catch块之后执行一些代码。


#4楼

In pre-7 how about: 在7之前如何:

  Boolean   caught = true;Exception e;try {...caught = false;} catch (TransformerException te) {e = te;} catch (SocketException se) {e = se;} catch (IOException ie) {e = ie;}if (caught) {someCode(); // You can reference Exception e here.}

#5楼

No, one per customer. 不,每个客户一个。

You can catch a superclass, like java.lang.Exception, as long as you take the same action in all cases. 只要在所有情况下采取相同的操作,您就可以捕获超类,例如java.lang.Exception。

try {// some code
} catch(Exception e) { //All exceptions are caught here as all are inheriting java.lang.Exceptione.printStackTrace();
}

But that might not be the best practice. 但这可能不是最好的做法。 You should only catch an exception when you have a strategy for actually handling it - and logging and rethrowing is not "handling it". 只有在实际处理它的策略时才应该捕获异常 - 并且日志记录和重新抛出不是“处理它”。 If you don't have a corrective action, better to add it to the method signature and let it bubble up to someone that can handle the situation. 如果您没有采取纠正措施,最好将其添加到方法签名中,然后让它冒泡到可以处理这种情况的人。


#6楼

Catch the exception that happens to be a parent class in the exception hierarchy. 捕获异常层次结构中恰好是父类的异常。 This is of course, bad practice . 这当然是不好的做法 。 In your case, the common parent exception happens to be the Exception class, and catching any exception that is an instance of Exception, is indeed bad practice - exceptions like NullPointerException are usually programming errors and should usually be resolved by checking for null values. 在您的情况下,公共父异常恰好是Exception类,并且捕获任何异常实例的异常,确实是不好的做法 - 像NullPointerException这样的异常通常是编程错误,通常应该通过检查空值来解决。

我可以在同一个catch子句中捕获多个Java异常吗?相关推荐

  1. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?

    例外是程序执行期间发生的问题(运行时错误).发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行. 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如 ...

  2. python捕获所有异常状态_如何在scrapy中捕获并处理各种异常

    前言 使用scrapy进行大型爬取任务的时候(爬取耗时以天为单位),无论主机网速多好,爬完之后总会发现scrapy日志中"item_scraped_count"不等于预先的种子数量 ...

  3. 如何在scrapy中捕获并处理各种异常

    前言     使用scrapy进行大型爬取任务的时候(爬取耗时以天为单位),无论主机网速多好,爬完之后总会发现scrapy日志中"item_scraped_count"不等于预先的 ...

  4. [Scrapy使用技巧] 如何在scrapy中捕获并处理各种异常

    前言     使用scrapy进行大型爬取任务的时候(爬取耗时以天为单位),无论主机网速多好,爬完之后总会发现scrapy日志中"item_scraped_count"不等于预先的 ...

  5. java方法被编译器调用_我异常了,快来捕获我,Java异常简述

    在我们日常编程中,异常处理是必不可少的,异常处理是否得当关系到程序的健壮性和后续维护成本. 试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设 ...

  6. java请求超时异常捕获_我异常了,快来捕获我,Java异常简述

    在我们日常编程中,异常处理是必不可少的,异常处理是否得当关系到程序的健壮性和后续维护成本. 试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设 ...

  7. java异常—— finally 子句+带资源的 try语句

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常-- finally 子句+带资源的 try语句 的相关知识: [1] final ...

  8. java catch子句的排列,对于catch子句的排列

    19.在异常处理中,如释放资源.关闭文件.关闭数据库等由( A.try 子句 B.catch 子句 C.finally 子句 D.throw 子句 20.对于 catch 子句的排列,下列哪种是... ...

  9. try catch finally 中包含return的几种情况,及返回结果

    第一种情况:在try和catch中有return,finally中没有return,且finally中没有对try或catch中要 return数据进行操作的代码,这种情况也是最好理解的. publi ...

最新文章

  1. 一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发
  2. python-docx 使用教程_python docx 中文字体设置的操作方法
  3. struts2中result的type跳转类型总结
  4. `MediaDevices.getUserMedia` `undefined` 的问题
  5. 《Python数据科学实践指南》——0.2节如何成为数据科学家
  6. require的key一个坑
  7. 产品设计的Kawaiization
  8. 微软u盘安装工具_使用微软Winget工具安装软件教程
  9. [html] 制作一个多选的下拉框
  10. 表单oninput和onchange事件区别
  11. 富文本编辑器:Typora(编辑与预览一体化)
  12. php类的实例化方法,php中类的定义和实例化方法
  13. IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑
  14. java elasticsearch_在Spring java框架中使用ElasticSearch的最佳方式
  15. 第二章 HTML5存储 Web存储
  16. ios计时器失效_iOS计时器
  17. jmeter下载图片
  18. 数据通信与计算机网络第2版,数据通信与计算机网络(第2版)习题1
  19. 《分布式系统原理与范型》习题答案 5.同步
  20. cve20190708补丁的kb名称_2019-6微软安全更新补丁KB4503269

热门文章

  1. HasMany() = (1..*) HasOptional() = (1..0,1) HasRequired() = (1..1)
  2. thinkphp 关联模型配置代码
  3. 【育儿日记2】兔子不要上幼儿园
  4. 下载网页内容,并编译生成CHM文件
  5. CLR via C#, Third Edition图书推荐及下载
  6. 根据指定字段排序编号(SQL Server 2005,Update,Order By)
  7. 域名解析中的cname解析和显性URL跳转和隐性URL跳转三者有什么区别
  8. 【u249】新斯诺克
  9. 关于js拷贝对象的问题
  10. Excel中MATCH函数的正确使用