Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 如何传播检查异常的try-catch块?_Java_Exception - Fatal编程技术网

Java 如何传播检查异常的try-catch块?

Java 如何传播检查异常的try-catch块?,java,exception,Java,Exception,我对Java异常有基本的怀疑 i、 例如,所有选中的异常都从Exception类扩展,而未选中的异常则从RuntimeException扩展。但运行时异常也从异常扩展而来 但是为什么要传播尝试catch块中有选中的异常但不在未选中的异常中?通常,您应该为要处理的每种特定类型的异常添加不同的catch块。如果您试图处理(通过重新刷新)已检查的异常,那么您应该知道要重新刷新的异常类型——只需添加一个catch块来重新刷新这些异常类型。我想您是在问,“我如何才能捕捉异常,而不是运行时异常 您可能不应该

我对Java异常有基本的怀疑

i、 例如,所有选中的异常都从
Exception
类扩展,而未选中的异常则从
RuntimeException
扩展。但运行时异常也从
异常扩展而来


但是为什么要传播
尝试
catch
块中有选中的
异常
但不在未选中的异常中?

通常,您应该为要处理的每种特定类型的异常添加不同的
catch
块。如果您试图处理(通过重新刷新)已检查的异常,那么您应该知道要重新刷新的异常类型——只需添加一个
catch
块来重新刷新这些异常类型。

我想您是在问,“我如何才能捕捉
异常
,而不是
运行时异常

您可能不应该尝试这样做。如果可能,您应该捕获特定类型的异常。如果您需要处理所有错误,那么您应该捕获
异常
,这将捕获所有内容*

您很少希望执行捕获(NullPointerException)
,因为如果您知道可以有一个
null
,那么您应该检查它。如果您的代码导致
NullPointerException
ArrayOutOfBoundsException
,那么您应该修复代码,使其不再抛出这些异常

此代码应向您展示如何执行您要求的操作:

public static void throwSomething(Exception throwMe)
{
    try {
        throw throwMe;
    }
    catch(Exception ex) {

        // Check if the object is a RuntimeException
        if(ex instanceof RuntimeException) {
            // Throw the same object again.
            // Cast to RuntimeException so the compiler will not
            // require "throws Exception" on this method.
            throw (RuntimeException) ex;
        }

        System.out.println("Caught an instance of a " +
                ex.getClass().toString());
    }
}

*实际上,
catch(Throwable)
将捕获包括
错误在内的所有内容。

最简单的方法是:

try { 
    //do stuff
} catch(RuntimeException e) {
    throw e;
} catch(SpecificCheckedException e) {
    //handle
} catch(Exception e) {
    //handle
}

并非所有未检查的异常都是从RuntimeException扩展而来的。除此之外,我不确定您在问什么-您是否想知道Java编译器如何强制执行声明或处理已检查异常的要求?我认为这是一个非常好的问题,错误及其子类也未检查。我不确定,但我认为它们被定义为是的。但是我正在尝试与ArrayIndexOutOfBoundsException比较,null指针异常etcRuntimeException有一个异常超类。但是选中的异常可以放在try…catch块中。但是未选中的异常不会为什么?你是什么意思?
catch(NullPointerException e)
工作正常。