JAVA——异常与错误

版权声明:文章资料来源于网络,都是由作者自己总结下来以供参考学习~如涉及版权问题请联系作者! https://blog.csdn.net/C_hydar/article/details/85762702

异常

异常(Exception)又称为例外,是指在程序运行过程中发生的非正常事件,这些事件的发生会影响程序的正常执行。

  • 数字中“无意义”的运算,例如除数为零、对负数求对数平方根等
  • 对数组进行操作时,超出了数组的最大下标
  • 程序所需进行的I/O操作不能正常执行,如所需访问的文件不存在
  • 内存耗尽无法进行类的实例化
  • JVM崩溃
    JAVA异常体系

Java异常体系

  • Throwable
    – 所有错误或异常的超类
    – 只有对象是此类(或子类之一)的实例时,才可throw
  • Exception
    – Exception类及其字类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常
    – IOException
    – NoSuchMehtodException
    – CertificateException
  • Error
    – 仅靠程序本身无法回复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题
    – NoClassDefFoundError
    – OutOfMemoryError
    – VirtualMachineError
  • RuntimeException
    – 可能在Java虚拟机正常运行期间抛出的异常的超类。
    – 当程序中可能出现这类异常时,即使没有用try…catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。

函数异常声明

  • 声明异常的语法(必检异常)
    返回类型方法名称(参数列表) throws 异常列表
    – 实例
void compute(int x) throws
	IllegalArgumentException,
	ArithmeticException {
	  ...
	}

– 注意
子类覆盖了父类的某一方法,那么该子类方法不可以被其覆盖的父类方法抛出更多的异常(但可以更少)

捕获异常

try{
	// 可能会产生异常的代码
} catch (某Exception类型 e) {
	// 处理该异常类型的代码
} finally {
	// 最后一定会被执行的代码
}
  • 从上到下分别对每个catch语句处理的例外类型进行检测,直到类型匹配为止
  • catch语句的排列顺序应该是从子类到父类
  • 对于处理不了的异常或要转型的异常,在方法的声明处通过throws语句抛出异常。

异常处理

  • 如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块,将异常交给相应的catch语句处理。
  • 如果Java虚拟机追溯到方法调用栈最底部main()方法时,仍没有找到处理异常的代码块,将按照下面的步骤处理:
    1. 调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。
    2. 如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。

异常处理注意事项

  • 不要轻易的忽略捕获的Exception
  • 不要简单地捕获顶层的Exception
    – 错误的例子

猜你喜欢

转载自blog.csdn.net/C_hydar/article/details/85762702