Java异常
引言
笔者初学java异常的时候,一时间接受不了异常的概念,那时候经常头疼到底什么是异常?异常的存在到底有什么意义?后来随着自己在工作中对java学习愈发深入,总结了对java异常机制的一些思考,故写下本篇博客用来帮助一些java初学者能更好的理解异常这个概念。
一、什么是异常
从字面上来理解,就是java程序在编译、运行的过程中可能出现的一些意料之外的事情,比如新建对象的时候失败,读取文件内容的时候文件路径错误,执行计算的时候出现被除数为空值等情况。为了让开发者能够更好的定位并解决这些异常,java设立了异常机制来监测开发过程中可能出现的异常情况。
二、Java中异常的分类
1、总体概览
Java中异常的父类是Throwable,日常我们接触的比较多的是它的两个子类Exception和Error
2、Error类
当程序运行时出现了异常,我们可以根据异常日志来定位并解决,但是有些异常是我们不能够解决的,只能够通过重启虚拟机或者重启进程来解决,例如 Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等等。
3、Exception类
该类主要分为两个子类,一个是Checked Exception类(受检测异常)和Unchecked Exception类(不受检测异常)。
Checked Exception类(受检测异常)
在执行SQL语句时或者涉及文件IO流操作的时候,特别容易出现异常情况,因此java规定这类可能会造成异常的java代码必须通过java异常机制来进行监测。在代码编写的时候,如果这些代码没有进行try-catch去捕获对应的异常类,编译器会直接报错,让编译无法继续进行下去,这就是受检测异常,常见的受检测异常有 IO Exception、ClassNotFoundException 、SQLException等。
Unchecked Exception类(不受检测异常)
不受检测异常是因为这类异常的发生往往让java异常机制无法预判,往往是代码在执行的过程中可能出现的异常,比如算数异常,在代码书写的时候,代码的语法逻辑没有错误,但是在用户输入除数和被除数的时候,可能会出现用户输入被除数为0的情况,这在算术上是不允许的,但是java异常机制无法预测到用户的输入,故在编译的时候,会让此类代码通过编译,不受异常检测,若是在执行的过程中有异常发生,再报异常。
常见的不受检测异常有:
NullPointerException(空指针错误)、
ArrayIndexOutOfBoundsException(数组越界错误)、
ClassCastException(类型转换错误)、
ArithmeticException(算术错误)等。
4、自定义类异常
该类异常往往是由业务需求,比如在商业运算中要求的浮点数精度高,需要使用Double类型数据,使用Float类型要报错,在通常的java检测机制中是没有该类异常,因此需要自己去定义这类异常。
public class NumTypeException extends Exception{
public NumTypeException() {
System.out.println("不应使用float类型浮点数,应使用double类型!");
}
public NumTypeException(String message) {
super(message);//调用Exception的有参构造方法
}
}
三、总结
java提供了多样化的异常类型来让我们更好的监测在程序编写中可能出现的异常,我们应该更好点对点的使用它,针对不同错误类型对症下药,而不是草草的用一个try-catch包裹你的所有代码,再丢出一个Exception异常。