Java:自动'投掷'声明:是,如果是,它的价值是什么?

时间:2015-03-12 04:11:56

标签: java function exception

以任何方法为例。 public static void main(String[] args)和其他任何一样好。如果我在其中有代码会抛出一个NullPointerException,为什么我不必声明我的方法会抛出这个?

假设没有定义,所有方法都会抛出一些特定的预定义异常,对吗?如果是这样,他们是什么?

为了澄清,我不是在寻找破坏代码的帮助,而是询问有关Java本身如何工作的问题。

3 个答案:

答案 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