除RuntimeException之外的exception

除了Java中的RuntimeException之外,是否有可能发生exception? 谢谢。

java.lang包定义了以下不是运行时exception的标准exception类:

  • ClassNotFoundException :抛出此exception以指示无法找到要加载的类。

  • CloneNotSupportedException :当为未实现Cloneable接口且因此无法克隆的对象调用clone()方法时,抛出此exception。

  • exception :抛出此exception的相应子类以响应在虚拟机级别检测到的错误。 如果程序定义了自己的exception类,它们应该是Exception类的子类。

  • IllegalAccessException :当程序尝试动态加载类时(即,使用Class类的forName()方法,或ClassLoader类的findSystemClass()或loadClass()方法)以及当前正在执行的方法,抛出此exception无法访问指定的类,因为它在另一个包中而不是公共的。 当程序试图创建类的实例(即,使用Class类的newInstance()方法)时,也会抛出此exception,该类没有调用方可访问的零参数构造函数。

  • InstantiationException :抛出此exception是为了响应尝试使用Class类的newInstance()方法实例化抽象类或接口。

  • InterruptedException :抛出此exception以表示正在hibernate,等待或以其他方式暂停的线程已被另一个线程中断。

  • NoSuchFieldException :无法找到指定的变量时抛出此exception。 此exception是Java 1.1中的新增内容。

  • NoSuchMethodException :无法找到指定的方法时抛出此exception。

是的,有三种

检查exception

由于环境中的故障​​,编译器会告诉您何时可能抛出它们。

如果程序可以使用它,它们应该被捕获,否则最好让它们离开。

他们中的大多数都是inheritance自

java.lang.Exception 

或来自

 java.lang.Throwable 

虽然从前者inheritance是更好的。

例如:

 java.io.IOException 

表示发生了某种I / Oexception的信号。 此类是由失败或中断的I / O操作产生的一般exception类。

错误

这些是特殊类型的例外。 当它们发生时,它们不应该被解决,这意味着发生了真正非常糟糕的事情。

所有这些都inheritance自

 java.lang.Error 

例如:

 java.lang.OutOfMemoryError 

当Java虚拟机由于内存不足而无法分配对象时抛出,垃圾收集器不再提供更多内存。

要么

 java.lang.StackOverflowError 

在发生堆栈溢出时抛出,因为应用程序过于严重。

RuntimeExceptions

用于识别程序员故障,而不是资源故障。

编码时可以“正常”避免运行时exception。 如果你有一个最有可能你做错了什么。

有时会捕获运行时exception,但是,除非您确切知道自己在做什么以及为什么这样做,否则捕获它们是一种不好的做法(再次,除非这正是您所需要的)

他们inheritance自己

 java.lang.RuntimeException 

例如

 java.lang.ArrayIndexOutOfBoundsException 

抛出以指示已使用非法索引访问数组。 索引为负数或大于或等于数组的大小

要么

 java.lang.NullPointerException 

当应用程序在需要对象的情况下尝试使用null时抛出

关于最后两个, 大多数时候,可以通过仔细编程并了解程序的状态来避免它们(这个数组有5个元素吗?为什么我应该尝试访问-1或6个。这个引用是否为null?我为什么要调用null.toString())

虽然我和那些声称应该抓住所有NPE的家伙有争议。 那么我能说什么呢。

基本上在java(与.NET相对)中,您有两种类型的exception:

  • Checked Exception:从exceptioninheritance的所有类。 客户端代码必须通过try-catch或throws子句处理这种exception(在编译器中强制执行)。
  • 未经检查的exception:从RuntimeExceptioninheritance的所有类。 客户端代码不必处理此类exception。

我可以建议以下O’Reilly On Javaexception文章。