以下哪一项正确?我希望编译器告诉我使用throws Exception
或throws RuntimeException
public void method1() throws NullPointerException {
throw new RuntimeException();
}
为什么我认为它不正确-> Bcoz NPE是RTE,但RTE不是NPE
这如何正确?我希望编译器告诉我使用throws Exception
or throws RuntimeException
或throws 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