我需要捕获两个异常,因为它们需要相同的处理逻辑.我想做的事情如下:
catch (Exception e, ExtendsRuntimeException re) {
// common logic to handle both exceptions
}
Run Code Online (Sandbox Code Playgroud)
是否可以避免重复每个catch块中的处理程序代码?
在使用FXCop分析一些遗留代码的同时,我发现在try块中捕获一般异常错误或者您是否正在寻找特定异常真的很糟糕.请给我一张明信片的想法.
我非常了解JDK 1.5.众所周知,除了新的API(例如AtomicInteger)之外,还有一些主要的语言变化,例如提供对泛型的支持,添加枚举,私有自动装箱和自动取消装箱等等.
我想找到一些资源具有在JDK 1.6和1.7的新功能(最好简短描述大的新功能我喜欢阅读完整的解释).至于API的变化,只有主要的变化是可以接受的,并且对新的变更进行简短的审查(例如,如果我记得写有从控制台读取字符的新方法).就功能而言,我想找到完整的列表(对象分配的这种变化,现在JVM实际上可以在堆栈上创建对象以进行优化,例如,但我不知道细节).
对于JDK 1.6 核心Java技术特性和Java™SE 6与J2SE 5.0的兼容性.对于JDK 1.7 使用Java SE 7异常更改,但它是不完整的列表.
在 JVM 加载字节码期间,使用以下代码片段面对此 java.lang.VerifyError。
try{
-----
} catch (NumberFormatException|CalculationException e) {
}
Run Code Online (Sandbox Code Playgroud)
这里 CalculationException 是自定义异常,它扩展了 java.lang.RuntimeException,而 NumberFormatException 是标准的 Java RuntimeException。虽然代码在本地 Windows 机器上编译并运行良好。
它在 QA/prod/Dev unix 节点之一上因验证错误而失败,并在其他 unix 节点上正常工作。尽管两个 unix 节点具有相同的配置(使用 RedHat 6.2 和 1.8 jdk 以及相同版本的 jar 文件),但也比较了 javap -c 在两个节点上生成的字节码,发现相同。
我还找到了两种在错误节点上解决此问题的方法。
1)由于此错误是在字节码验证步骤中出现的,因此尝试通过将 dev unix 框上的字节码验证禁用为 -Xverify:none (也尝试过 -XX:-UseSplitVerifier 但 dint 工作,因为我认为它已从 jdk 8 中禁用)但是,由于我们不会在 prod 中禁用字节码验证,因此一直在寻找其他一些解决方法。
2) 另一种解决方法是使用父异常:catch 块中的 RuntimeException 而不是组合两个异常。
我无法理解 Java 是否确实对这种捕获方式有问题,为什么编译器 dint 抱怨它以及为什么它可以在一台机器上运行而不是在具有相同配置的其他机器上运行。错误原因也没有意义,它说:CalculationException (current frame, stack[0]) is notassignable to 'java/lang/RuntimeException 虽然它实际上是可分配的,经测试
if (RuntimeException.class.isAssignableFrom(CalculationException.class)){
System.out.println("Assisgnable");
}
Run Code Online (Sandbox Code Playgroud)
完整的异常详细信息: …
通常情况下,我必须输入类似的内容
if(a == x || b == x) {...}
Run Code Online (Sandbox Code Playgroud)
但是我看到使用try/catch块时你可以做这样的事情:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {}
Run Code Online (Sandbox Code Playgroud)
是否有类似我可以用等式语句做的事情,比如
if((a | b) == x) {...}
Run Code Online (Sandbox Code Playgroud)
?
我有以下代码:
try {
//do some
} catch (NumberFormatException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
} catch (ClassCastException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
} catch (IllegaleArgumentException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
}
Run Code Online (Sandbox Code Playgroud)
是否可以将这3个catch子句合并为一个?它们具有完全相同的处理程序代码,因此我想重用它.
我有以下代码
try {
// code
} catch (Exception1 e1) {
if (condition) {
//code
} else {
throw e1;
}
} catch (Exception2 e2) {
if (condition) {
//code
} else {
throw e2;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用私有方法在两个catch中模块化if-else块.
更具体地说,如果我使用一种方法如何将不同的异常传递给方法并适当地抛出它们?
我按照这个链接,但不明白如何传递和抛出正确的异常.
我知道这可能是这个问题的重复.但是这个问题的答案包括早期Java版本中不支持的|内部catch (..|..).我必然会使用旧版本.我对任何类型的异常都有相同的回应.所以,我想把我的catch陈述合二为一,如下:
try {...}
catch(Excetion1 e1 OR Exception2 e2 OR etc)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用哈希|而不是OR结果.对于较旧的Java版本,是否有任何解决方法?