Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不向声明中添加抛出的情况下重新抛出异常_Java_Try Catch_Throws - Fatal编程技术网

Java 在不向声明中添加抛出的情况下重新抛出异常

Java 在不向声明中添加抛出的情况下重新抛出异常,java,try-catch,throws,Java,Try Catch,Throws,有没有办法避免在Java的方法接口中声明“抛出”的需要 问题是:我有一个非常简单的方法,它抛出NPE。这很简单,我添加了所有可能的检查,坦率地说,我无法想象这是如何发生的,所以我想调查一下。我在日志中添加了try/catch(Throwable e),最后想要重新抛出 这需要我添加“抛出”声明。但是这个方法是接口的实现,所以我还需要更新接口,然后更新所有其他实现,然后更新一些(可能很多)用法。真的没有办法避免吗?我现在要做的是在catch的末尾引起本机异常:通过访问null或除以0-这看起来太糟

有没有办法避免在Java的方法接口中声明“抛出”的需要

问题是:我有一个非常简单的方法,它抛出NPE。这很简单,我添加了所有可能的检查,坦率地说,我无法想象这是如何发生的,所以我想调查一下。我在日志中添加了try/catch(Throwable e),最后想要重新抛出


这需要我添加“抛出”声明。但是这个方法是接口的实现,所以我还需要更新接口,然后更新所有其他实现,然后更新一些(可能很多)用法。真的没有办法避免吗?我现在要做的是在catch的末尾引起本机异常:通过访问null或除以0-这看起来太糟糕了

如果您不关心原始异常是否被保留,您可以抛出一个
RuntimeException
并将原始异常包装在其中<代码>运行时异常和派生异常未选中,不需要列出。如果需要保留原始异常,则必须调整
throws
子句。

此外,如果您只关心NPE,因为它是一个RuntimeException,您可以捕获NullPointerException,然后重新播放它。这将不需要更改方法签名。酷,这是有效的!对于我来说,这种行为相当奇怪,编译器“知道”应该以不同方式对待的继承的某些“特殊”分支。。。我是说,这就是为什么我没想到会这样。谢谢。编译器知道
RuntimeException
和从它派生的任何内容都不需要在方法的
throws
子句中声明。这些在Java中被称为“未检查的异常”。这种异常包装可能会导致纯粹主义者惊恐地尖叫,但它是解决Java检查异常问题的一种实用方法。不要捕获可丢弃的
,因为它包括
VirtualMachineError
OutOfMemoryError
,和
ThreadDeath
,您不希望捕获或尝试从中恢复。只需捕获
异常
,或者在您的情况下更好地捕获
运行时异常
@DavidConrad,您是对的。如果我抓住了特定的NPE,我就不会有这个问题。