异常
异常:程序在运行过程中出现的不正常情况;例如:用户输入数据有误;读写文件时,文件被强制删除;网络传输过程中突然断网。出现异常后会导致jvm(虚拟机)停止运行
异常指的并不是语法错误,语法错了,编译不通过,不会生成字节码文件根本不能运行;代码写错不属于异常范围
异常的分类
异常(Exception)分为:
检查期异常:在编译期间就会主动提醒程序员要进行处理的异常
运行期异常:在编译期间不会主动提醒程序员进行处理的异常
异常处理机制
java中默认的异常处理机制:将出现的异常按不同的类型分类,分别为每一种异常封装成一个类来进行表示,当出现某种类型的异常情况时,会抛出此类的对象,然后虚拟机停止运行
使用异常处理机制,对运行过程中出现的异常情况进行捕捉并处理
java异常体系结构
Throwable 是异常体系的超类
Error 错误
Exception 异常
常见的异常
1、算数异常 ArithmeticException
2、数组越界异常 ArrayIndexOutOfBoundsException
3、字符串索引越界异常 StringIndexOutOfBoundsException
4、类转换异常 ClassCastException
5、数字格式化异常 NumberFormatException
6、使用null中的方法或者属性(空指针异常) NullPointerException
错误
1、栈溢出错误 StackOverflowError (常见于递归算法中)
2、堆内存溢出 OutOfMemoryError
异常处理
在编码时,就对可能出现问题的代码(经验问题)预先编写一些处理机制,程序运行后出现异常就会执行处理机制,之后继续执行后续的程序。
java的异常处理是通过5个关键字来实现
try、catch、finally
try{
编写可能出现异常的代码
}catch(异常类型 异常名){
`异常名.printStackTrace() //打印异常信息到控制台`
异常名.getMessage() //拿到异常原因
处理机制
}finally{//场景1 异常没有被捕捉到,后面的代码无法执行,但是finally中的代码是可以执行的
场景2 确保在出现异常的情况下,依然最终把对象关掉
finally中的代码总是可以执行
}
在catch中使用Exception类型,可以获取任意异常类型,但是必须要放在最后面
throws
throws 异常类型 :声明表示此方法中可能会出现给定的异常,并且该方法不处理异常,谁调用谁处理。在最顶层的main方法中就不能在抛出了就必须对异常进行处理
用在方法的声明部分,表示此方法中有可能出现某种类型的异常,此方法不处理异常,谁调用谁处理。
throw
用在方法体内部,抛出一个具体的异常对象,该方法终止运行,在异常对象的构造方法中自定义异常原因