Java的异常和错误

Java语言中所有的错误及异常都继承自Throwable类。只有当对象是此类或其子类的实例时,才能通过JVM或者Java throw语句抛出。有点意思的是其他以able结尾的都是接口,而Throwable确是类


Throwable有两个子类:Error和Exception

(1).Error:

    错误,表示由JVM侦测到的无法预期的错误,这是属于JVM层次的严重错误,导致JVM无法运行,因此这是无法采取任何恢复的操作,顶多只能显示错误信息。

(2).Exception:

    异常,可以被抛出的基本类型,属于可恢复可捕捉的例外


Java主要提供的两种异常:Runtime Exception和Checked Exception

(1).Checked Exception:

    也就是我们经常遇到的IO异常,以及SQL的异常都是这种异常。对于这种异常,Java编译器要求我们必须强制进行catch。

(2).Runtime Exception:(注意,这个是异常,不是错误;将自动被捕获,不是不能捕获)

    即运行时异常,是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。RuntimeException 的任何子类都无需在throws 子句中进行声明,及我们可以不对运行时异常做处理。当出现这种异常时由JVM托管,将异常一直往上层抛,直到遇到处理代码。如果没有处理快,到最上层,如果是多线程则由Thread.run()抛出,该线程结束。如果是单线程则被main()抛出,程序结束。即当我们不对运行时异常做处理时,当出现运行时异常时,要么是线程终止,要么是程序终止。

    如果我们不想终止,则必须捕获所有的运行时异常,决不让这个线程退出。在出现异常数据时,正确的做法应该是将异常舍弃,同时记录日志,而不应该由于异常数据影响对下面正确数据的处理。


常见的异常:
1.执行异常

执行异常即运行时异常,继承于 Runtime Exception 。 Java 编译器允许程序不对它们做出处理。下面列出了主要的运行时异常。

·     ArithmeticException : 一个非法算术运算产生的异常。

·     ArrayStoreException : 存入数组的内容数据类型不一致所产生的异常。

·     ArrayIndexOutOfBoundsException : 数组索引超出范围所产生的异常。

·     ClassCastException : 类对象强迫转换造成不当类对象所产生的异常。

·     IllegalArgumentException : 程序调用时,返回错误自变量的数据类型。

·     IllegalThreadStateException : 线程在不合理状态下运行所产生的异常。

·     NumberFormatException : 字符串转换为数值所产生的异常。

·     IllegalMonitorStateException : 线程等候或通知对象时所产生的异常。

·     IndexOutOfBoundsException : 索引超出范围所产生的异常。

·     NegativeException : 数组建立负值索引所产生的异常。

·     NullPointerException : 对象引用参考值为 null所产生的异常。

·     SecurityException : 违反安全所产生的异常。

2.检查异常

除了执行异常外,其余的子类是属于检查异常类也称为非运行时异常,它们都在 java.lang 类库内定义。 Java 编译器要求程序必须捕获或者声明抛弃这种异常。下面列出了主要的检查异常。

·     ClassNotFoundException : 找不到类或接口所产生的异常。

·     CloneNotSupportedException : 使用对象的 clone( )方法但无法执行 Cloneable所产生的异常。

·     IllegalAccessException : 类定义不明确所产生的异常。

·     InstantiationException : 使用 newInstance( )方法试图建立一个类 instance时所产生的异常。

·     InterruptedException : 目前线程等待执行,另一线程中断目前线程所产生的异常。


常见的错误

Error 类与异常一样,它们都是继承自 java.lang.Throwable 类。 Error 类对象由 Java 虚拟机生成并抛出。 Error 类包括 LinkageError (结合错误)与 VitualmanchineError (虚拟机错误)两种子类。

1. LinkageError(结合错误)

LinkageError 类的子类表示一个类信赖于另一个类,但是,在前一个类编译之后,后一个类的改变会与它不兼容。

LinkageError 类包括 ClassFormatError 、 ClassCircularityError 、 ExceptionInitializerError 、 NoClassDeFormatError 、 VeritfyError 、 UnsatisfidLinkError 和 IncompatibleClassChangeError 等子类。其中 NoIncompatibleClassChangeError 类又包含 AbstractMethodError 、 NoSuchField   Error 、 NoSuchMethodError 、 IllegalAccessError 和 InstantiationError 子类。这些类所代表的意义如下所述。

·     ClassFormatError : 类格式所产生的错误。

·     ClassCircularityError : 无限循环所产生的错误。

·     ExceptionInitializerError : 初始化所产生的错误。

·     NoClassDeFormatError : 没有类定义所产生的错误。

·     VeritfyError : 类文件某些数据不一致或安全问题所产生的错误。

·     UnsatisfidLinkError : Java虚拟机无法找到合适的原始语言( Native-Language)定义的方法所产生的错误。

·     IncompatibleClassChangeError : 不兼容类所产生的错误。

·     AbtractMethodError : 调用抽象方法所产生的错误。

·     NoSuchFieldError : 存取或改变数据域所产生的错误。

·     NoSuchMethodError : 调用类方法所产生的错误。

·     IllegalAccessError : 不合法存取或改变数据域调用方法所产生的错误。

·     InstantiationError : 使用抽象类或接口所产生的错误。

2. VitualmachineError(虚拟机错误)

当 Java 虚拟机崩溃了或用尽了它继续操作所需的资源时,抛出该错误。

VitualmachineError 包含 InternalError 、 OutOfMemoryError 、 StackOverflow Error 和 UnknownError 。这些类所代表的意义如下所述。

·     InternalError : 虚拟机内部所产生的错误。

·     OutOfMemoryError : 虚拟机内存不足所产生的错误。

·     StackOverflowError : 堆栈无法容纳所产生的错误。

·     UnknownError : 虚拟机不知名异常所产生的错误。

3. 编译时错误




文章参考:

http://www.importnew.com/12425.html#ArrayIndexOutOfBoundsException

http://blog.csdn.net/icearmour/article/details/6756545

http://www.360doc.com/content/12/0102/09/1824154_176606978.shtml


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java错误(Error)和异常Exception)是两个不同的概念。 错误(Error)通常表示严重的问题,它们是由于系统级别的故障或资源耗尽等无法恢复的情况导致的。错误是无法被程序员处理的,例如OutOfMemoryError(内存耗尽)、StackOverflowError(栈溢出)等。当出现错误时,程序通常会终止并抛出错误信息。 异常Exception)则表示可预测的问题,它们通常由程序逻辑或外部因素引起,但可以被程序员处理。异常分为两种型:已检查异常(Checked Exception)和未检查异常(Unchecked Exception)。 已检查异常是指在编译时强制要求程序处理的异常,它们都是Exception或其子的实例。例如,IOException、SQLException等。在处理已检查异常时,程序员必须使用try-catch语句块捕获并处理这些异常,或者在方法签名声明方法可能抛出这些异常。 未检查异常也称为运行时异常(RuntimeException),它们是Exception的子,但是编译器不会强制要求程序处理它们。例如,NullPointerException、ArrayIndexOutOfBoundsException等。未检查异常通常由程序员的错误引起,比如访问空引用、数组越界等。程序可以选择捕获并处理这些异常,但并非强制性要求。 总结起来,错误(Error)是无法被程序员处理的严重问题,而异常Exception)是可以被程序员捕获和处理的可预测问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值