在尝试我在m1()
方法中发现的多捕获特性时,一切都按预期正常工作。
public class Main {
public int m1(boolean bool) {
try {
if (bool) {
throw new Excep1();
}
throw new Excep2();
//This m1() is compiling abs fine.
} catch (Excep1 | Excep2 e) {
return 0;
}
}
public int m2(boolean b) {
try {
throw b ? new Excep1() : new Excep2();
//This one is not compiling.
} catch (Excep1 | Excep2 e) {
return 0;
}
}
private static interface I {
}
private static class Excep1 extends Exception implements I {
}
private static class Excep2 extends Exception implements I {
}
}
表达式的类型
b ? new Excep1() : new Excep2()
是exception
,因为这是excepti1
和excepti2
的公共超类型。
但是,您没有捕捉到exception
,因此编译器会抱怨它。
public int m2(boolean b) {
try {
throw b ? new Excep1() : new Excep2();
} catch (Exception e) {
return 0;
}
}
我所能找到的就是这个特殊的表达式是15.25.3。引用条件表达式。
我不完全确定它是算作一个poly表达式还是一个独立表达式。我认为它是独立的(因为poly表达式涉及赋值上下文或调用上下文,我不认为throw
语句可以算作这两者之一)。
对于独立表达式:“如果第二个和第三个操作数具有相同的类型(可能是null类型),那么这就是条件表达式的类型。”
编译器似乎选择了最特定的常见类型(Exception
),因此catch(Exception e)
可以解决编译错误。
我还尝试用IOException
的两个子类替换您的两个自定义异常,在这种情况下,catch(IOException e)
解决编译错误。
每当我的VNC连接被终止时(每当我重新启动VM时),我都试图捕捉一个异常,并且我试图忽略它以继续我的Jython脚本。我不知道如何编写try catch语句来捕获异常,因为它起源于Java。这是一个sikuliX脚本。
本文向大家介绍是否可以在单个catch块中捕获多个Java异常?,包括了是否可以在单个catch块中捕获多个Java异常?的使用技巧和注意事项,需要的朋友参考一下 例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如果您需要专门处理该代码,则应在一次尝
问题内容: 我知道我可以做到: 我也可以这样做: 但是,如果我想在两个不同的异常中做同样的事情,那么我现在想到的最好的方法就是: 有什么办法可以做这样的事情(因为在两个异常中都采取的措施是): 现在,这确实不起作用,因为它与以下语法匹配: 因此,我捕捉两个截然不同的异常的努力并未完全实现。 有没有办法做到这一点? 问题答案: 例如,子句可以将多个异常命名为带括号的元组。 或者,仅对于Python
如果这有什么不同的话,我是在运行Java7的OSX10.8上。
问题内容: 我想一个更清洁的方式来获得以下功能,以捕捉和在一个块: 有什么办法吗?还是我必须分开抓住它们? 并具有一个共享的基类,但它们也与其他我要介绍的类型共享它,因此我不能只抓住基类。 问题答案: 更新: 从PHP 7.1开始,此功能可用。 语法为: 文件:https://www.php.net/manual/en/language.exceptions.php#example-287 RFC
问题内容: 在Java中,我想做这样的事情: …代替: 有什么办法吗? 问题答案: 从Java 7开始,这已经成为可能。多捕获块的语法为: 但是请记住,如果所有异常都属于同一类层次结构,则可以简单地捕获该基本异常类型。 还要注意,如果从ExceptionA直接或间接继承了ExceptionB,则不能在同一块中同时捕获ExceptionA和ExceptionB。编译器会抱怨: