异常指的并不是语法错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。
异常:正常语法中的指针,参数内容等等错误导致jvm无法继续运行的情况。
若在编译过程中发现异常,要及时处理
处理之前-------我们先了解下Java的异常体系(如下图):
Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类。
Error是指Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等
严重情况。一般不编写针对性的代码进行处理。
Exception是指其它因编程错误或偶然的外在因素导致的一般性问题,需要使用针对
性的代码进行处理,使程序继续运行。否则一旦发生异常,程序也会挂掉
Java的异常处理
5个关键字:try、catch、finally、throw、throws
try: 检测不安全的代码块(发现异常)
try块中任何一条语句发生了异常,下面的代码将不会被执行,所以编程时避免把不相关的代码写进try里
catch: 捕捉异常
一个try后面可以有多个catch分别捕获不同类型的异常,要从子类往父类的顺序写,否则有编译错误
finally: 连接一段必会运行(无论异常与否)的代码块
一段try后只能有一个finally语句
throws: 定义一个方法的时候可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用处进行处理。
throw: 用于显式抛出异常,抛出的时候是抛出的是一个异常类的实例化对象
语法:throw new 异常类构造方法
捕获异常的有关信息(调用异常对象的方法):
getMessage() 获取异常信息,返回字符串
printStackTrace() 获取打印异常类名和异常信息,以及异常出现在程序中的位置
java异常分为两大类:
1.编译期异常(即checked异常、受检异常):编译器在检查程序员代码时发现的异常,若不处理,编译器不会产生字节码文件。通常,这类异常的发生不是由程序员的代码引起的。
2.运行时期异常(即runtime异常、unchecked异常、非受检异常):代码运行才会发生的异常。通常,这类异常是由程序员的代码编写不当引起的,需要自行检查修改代码
自定义异常
是指自己定义的Api中定义的异常类的子类
示例:
public class 异常类名 extends Exception/RuntimeException{
public 异常类名(String msg){
super(msg);
}
}
作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆