Java的异常与错误
异常和错误的继承结构:
Java.Lang.Throwable
Error(错误)
OutMemoryError
Exception(异常)
RuntimeException(运行时异常或叫系统异常,不可检测)
ArithmeticException
ArrayIndexOutOfBoundsException
NullPointException
InputMismatchException
CheckException(普通异常可检测)
IOException
SQLException
exception: 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
1.他分为可被控制(checked) 或不可控制的(unchecked);
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理
Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。
Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是非凡的,它们 不能通过client code来试图解决,所以称为Unchecked exception 。
Error:表示恢复不是不可能但很困难的情况下的一种严重问题,不能通过程序自己解决。比如说内存溢出,只能通过重启程序解决。
1.总是不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉
Java中的异常处理机制:
当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常(运行时异常)。违反语义规则包括2种情况:一种是Java类库内置的语义检查。例如数组下标越界时会引发IndexOutOfBoundsException,访问null的对象时会引发 NullPointerException,这类异常可不用TryCatch处理。 只有CheckException可一用Try/Catch块来进行处理,或通过异常链进行抛出。这种情况允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字引发异常。
throw和throws有什么区别:
throw关键字一般用于方法内部,用于抛出一个异常类对象,一旦异常被抛出后,throw语句后的程序代码将不会被执行。
throws关键字通常出现在方法声明中,用来指定该方法可能抛出的异常。如果可能有多个异常抛出,可以使用逗号将它们分隔开。