当前位置: 首页 > 面试题库 >

Java:抛出RuntimeException

濮君植
2023-03-14
问题内容

以下哪一项正确?我希望编译器告诉我使用throws Exceptionthrows RuntimeException

public void method1() throws NullPointerException {

        throw new RuntimeException();
    }

为什么我认为它不正确-> Bcoz NPE是RTE,但RTE不是NPE

这如何正确?我希望编译器告诉我使用throws Exceptionor throws RuntimeExceptionthrows NumberFormatException

public void method2() throws NullPointerException {


    throw new NumberFormatException();
}


public void method3() throws Exception { // this is fine, as expected

        throw new RuntimeException();
    }


    public void method4() throws RuntimeException { // this is fine, as expected

        throw new NullPointerException();
    }

    public void method5() throws Exception { // this is fine, as expected

        throw new NullPointerException(); 
    }

回答:

对于RTE,即使您不throws向方法添加子句,编译器也不会说什么

public void method6()  { // no compile time errors!!

        throw new NullPointerException(); 
    }

但是,当我们明确地说“ throw new NullPointerException();”时,为什么编译器会忽略它?与’ throw new SQLException();’ 相同
它不会在运行时抛出,例如某些对象被评估为null,并对该null对象调用了操作。通常,一个函数必须声明它可以抛出的所有异常,但是RTE绕过了它!

RTE是未经检查的异常。但是当您说抛出新的RTE时,是否仍未选中?!

问题 -这不是缺陷吗?或者请纠正我以了解为什么会这样

  • 更新:

请注意,此问题 与已 检查的异常和未检查的异常 之间的区别无关 。问题不在于任何类型的异常或错误之间的区别。

问题是为什么不处理显式标记的RunTimeException,或者不强制编译器对其进行处理。

例如:

public void methodA() { // methodA is not forced to handle the exception.
        methodB(); 
    }

    public void methodB() throws RuntimeException {

    }

问题答案:

你误会了。

受检查的异常是在编译时检查的异常(因此称为其名称)。因此,如果您有doFoo引发异常的方法,则BarException必须声明该方法引发BarException:

void doFoo() throws BarException { }

未检查的异常是编译器未检查的异常,因此您不必声明抛出它们

throw new Exception()只是抛出一个新的已检查异常实例,或者在RuntimeException情况下未检查。仅当您实际上使用该throw子句引发了已检查的异常时,检查因素才出现。

至于是否是缺陷,现在这是一个备受争议的话题。使用抛出大量未经检查的异常而不记录它们抛出异常的API会很烦人。但是,有时可能会发生基于应用程序的唯一运行时状态发生的异常,在这种情况下,您无法声明可以抛出某个检查过的异常,而这正是运行时异常发光的地方(例如NullPointerException



 类似资料:
  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我正在使用gson将json字符串转换为Java对象。值RESULT2是完全一样的值RESULT1。(从调试器复制;添加了反斜杠) 转换result1时会引发以下异常: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期的EOF在第1行的第170列 转换result2效

  • 问题内容: 我目前正在使用play2框架。 我有几个正在抛出的类,但是play2s全局处理程序使用throwable而不是异常。 例如我的一门课是抛出一个。我是否可以检查可抛物体(如果是)? 问题答案: 您可以使用它来检查它是否存在。 例: 假设是参考。

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:

  • 问题内容: 除了抛出,这意味着我方法的所有调用者都需要捕获Exception(可以包含RuntimeExceptions),我想在出现问题时抛出一种更特定类型的异常。 我可以创建自己的扩展了Exception或其他异常类型的异常类型,但是我很好奇是否可以重用Java语言所附带的一些异常,例如: IllegalArgumentException UnsupportedOperationExcepti