Error
Error是Throwable的子类,代表错误
Error通常是仅靠程序本身无法恢复的严重错误,例如:JVM内存不足或是方法调用过程中栈溢出 (java.lang.StackOverflowError栈溢出)、 (OutOfMemoryError堆溢出)
Exception
Exception是Throwable的子类,代表异常,Exception可非为运行时异常(RuntimeException)和非运行时异常(CheckedException)
RuntimeException
运行时异常、未检查异常,和RuntimeException有直接或间接继承关系的异常类称为运行时异常
特点
编译器不检测此类异常,编译通过,但是运行报错
处理
运行时异常可处理也可以不处理,此类通过严谨代码 可以避免
常见的运行时异常
ArrayIndexOutOfBoundsException( 数组下标越界)
StringIndexOutOfBoundsException( 字符串下标越界)
IndexOutOfBoundsException( 集合中下标越界)
java.lang.NullPointerException(空指针异常)
java.lang.ClassCastException(类型转换异常)
java.lang.NumberFormatException(数字格式转换异常)
CheckedException
非运行时异常、已检查异常,和 RuntimeException没有任何继承关系的异常类称为非运行时异常
特点
编译器检测此类异常,编译报错
处理
非运行时异常一旦出现,必须处理
举例
Class.forName(“Student”);// 区分于语法错误
异常产生的原因
自动产生异常
产生原因
程序运行过程中,遇到错误的代码,自动产生异常
结果
程序中一旦出现异常,程序不能继续执行之后的代码,则程序被终止掉
手动产生异常
关键字
throw
语法
throw new 异常类名(“异常信息”);
位置
定义在方法内部
结果
作用效果类似于 return语句,终止当前方法、函数;程序运行时因异常而被终止掉
异常的传递
Java中的异常沿着方法的调用链进行反方向进行传递,最终传递给JVM
异常的处理
消极处理异常(声明异常)
关键字
throws
位置
在方法声明处
语法
修饰符 返回值类型 方法名(形参列表)throws 异常 的类名1,异常类名2{
// 方法的实现部分
}
消极处理异常时,可以利用其父类型的异常进行处理
结果
消极处理异常只是推卸责任,最终将责任推卸给JVM,程序最终还是因异常而被终止
作用
消极处理异常可以让非运行时异常在编译时通过
积极处理异常
语法
try{
// 可能出现异常的语句
}catch(异常类名 e){
// 异常出现执行的语句
}
try…catch常用语法
try…catch结构,一旦异常出现try…catch 才起作用
try后面可以跟多个 catch结构,一旦try中出现异常,则从 上往下依次进行匹配catch,直到匹配成功
catch中可以利用父类型捕获:本类+所有的子类型的异 常,体现多态
子类型 的 catch 需要定义在 父类型的 catch前面
catch中 只能定义 try中可能出现的非运行时异常; catch中 可以定义任意的 运行时异常,即使try中不可能出现 此类运行时异常
finally
finally表示必须执行的语句
语法
try{
// 可能出现异常的语句
}catch(异常类名 e){
// 异常出现时,执行的语句
}finally{
// 不管有没有异常,必须执行的语句 }
开发时,通常不要将return定义在finally中,finally通常用于关闭资源,例如IO流等
常见的结构小结
try{}catch(){}
try{}catch(){}catch(){}
try{}catch(){}finally{}
try{}catch(){}catch(){}finally{}
以下结构遇到认识:
try{}finally{} 这种做法目的是保证某些代码放在finally中必须执行
try{ try{}catch(){} }catch(){}
try{}catch(){ try{}catch(){} }
try{}catch(){}finally{ try{}catch(){} }
finally要么和try一起,要么try…catch一起,但是不 能单独使用
final、finalize、finally的区别
final:修饰符,可以用于修饰变量、方法、类
final修饰的变量作用范围内的常量,允许一次赋值,不允许修改
final修饰方法允许子类继承使用,但是不允许子类覆盖final修饰的类;不允许子类继承,即没有子类
finalize:方法名,此方法是Object类中的,在垃圾回收器回 收垃圾对
象,jvm自动调用的方法
finally:积极处理异常时结构内容,必须执行的语句定义finally中
常用的结构
try{}catch(){}finally{}
try{}finally{}
自定义异常
一个类继承Exception或是其子类,如果定义的类继承了RuntimeException或是RuntimeException的子类,则此异常为运行时异常;如果此类和RuntimeException 没有任何继承关系,则异常类为非运行时异常
提供两个构造方法
a. 无参数的构造方法
b. 有参数的构造方法,参数类型为String ,接收异常信息利用super(message); 设置异常信息