以任何方法为例。 public static void main(String[] args)
和其他任何一样好。如果我在其中有代码会抛出一个NullPointerException
,为什么我不必声明我的方法会抛出这个?
假设没有定义,所有方法都会抛出一些特定的预定义异常,对吗?如果是这样,他们是什么?
为了澄清,我不是在寻找破坏代码的帮助,而是询问有关Java本身如何工作的问题。
答案 0 :(得分:1)
Exception
主要有两套。一个是继承RuntimeException
的人。您无需定义它(如void f() throws SomeException
)。这些被称为未经检查的异常。
对于其他你必须的。它们被称为已检查异常。
有关详细信息,请参阅here
答案 1 :(得分:1)
Java已检查并取消选中异常。来自documentation:
未经检查的异常类是运行时异常类和错误类。
已检查的异常类是除未经检查的异常类之外的所有异常类。也就是说,已检查的异常类都是Throwable的子类,而不是RuntimeException及其子类和Error及其子类。
NullPointerException
是未经检查的异常的示例。这意味着您不会被强制捕获它或为每个有可能抛出它的方法添加throws NullPointerException
。
FileNotFoundException
是一个经过检查的例外。因此,如果您使用引发FileInputStream
的{{1}},则需要使用try-catch块包围它,或者声明它所在的方法会抛出FileNotFoundException
。
答案 2 :(得分:1)
运行时异常表示编程问题导致的问题,因此,无法合理地期望API客户端代码从它们恢复或以任何方式处理它们。这些问题包括算术异常,例如除以零;指针异常,例如尝试通过空引用访问对象;和索引异常,例如尝试通过索引太大或太小来访问数组元素。
运行时异常可以发生在程序的任何地方,而在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常(尽管可以)。
http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html