异常
介绍:
异常,就是程序出现的不正常的情况。
分类
在java程序设计中有一大类,是关于异常的,Throwable
其下有两个分类:Error,Exception,
Error :程序出现的严重问题,且只能抛出(throw),不能试图捕获(try catch)
Exception:是程序出现的问题,可以捕获可以抛出。
ps:编译期叫受检查异常,运行时异常又叫不受检测异常…
异常的产生
在代码内部使用throw异常对象,来产生异常。
总结目前见过的异常:
ArithmeticException 算术异常
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException 空制在
ClassCastException 类型转换错误
NumberFormatException 数字格式化错误
ParseException 解析异常
编译器异常和与运行期异常
运行期异常:代码执行时可能会出错,程序中的运行时异常没有强制处理。默认抛出
编译期异常:代码编译时会出现错误,程序中如果出现编译器异常就必须强制处理。
异常的处理
异常的处理的只有两种方案:
1.抛出(throws)
2.试图捕获(try catch)
是将异常在方法签名上声明抛出。
public void test() throws 异常类名 {}
在方法参数列表后,使用throws 加异常类名来声明抛出异常且允许声明多个异常类,用逗号隔开。
异常的传递:A设置异常,B调用A后,B也要抛出异常。
运行异常不强制。
抛出异常后有什么影响:抛出异常后,后续代码不执行
试图捕获
试图捕获 try…catch
try{
// 可能会出现错误的代码
}catch(异常类名 e){
e.xxx()
}
try 里面包裹代码,如果其中代码出现异常,就会被catch抓住,需要出异常和catch后声明的异常同一类型才可以抓住,否则抓不住。
如果try里面的带代码没有任何报错,catch内的代码不执行。
catch可以设置多个catch进行捕获异常,特别强调但是不是同时抓多个异常对象,因为try内部一旦出现异常,tr内部的后面不执行了。
虽然可以同时声明多个异常,很麻烦,可以直接写Exception。
无论try catch代码有没有错,后面的代码依旧正常执行。
public class Test1 {
public static void main(String[] args) throws ParseException {
T1();
T2();
}
// 捕获异常
public static void T1(){
try {
System.out.println(1/0);
}catch (Exception e){
System.out.println(0/1);
}
}
// 抛出异常
public static void T2() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date date = sdf.parse("20220101");
}
finally
try{
// ..
}catch(Exception e){
// ..
}finally{
// 始终都会执行的代码。
}
finally 这么设计的作用:为了确保某些代码必须执行。一般就是用于释放资源。
扩展:配合return可以玩点化活。
异常的应用
- 设计方法时,如果这个方法会进程调用,或者被多次调用,尽量的自行捕获异常。一旦抛出,所有使用者都需要处理异常!
方法重写:子类抛出的异常 小于等于 父类的异常的异常范围。
特殊的就是父类没有异常,子类重写时也不能抛出异常。
异常的API
最大的父类Throwabale类
// 构造方法
Throwable(String message); 构造指定详细的新throwable;
Throwabale 就是异常的详细信息
// 方法
String getMessage();返回此throwable的详细字符串。
void printStackTrace();将此throwable及其追踪输出标准错误。
自建异常
只有当对象是Trowable类(或其子类之一)的实例时,才能通过Java虚拟机或者Javathrow语句抛出
换句话说,自定义异常需要继承Throwable类
一般继承的是Throwable的类,
继承Error那就是有对应的特点,只能抛出不能捕获
继承Exception,就是Exception对应的特点,可以抛出捕获
继承RunntimeException那就是运行时的异常的特点
继承非RuntimeException及其子类看是编译其异常的特点
1.建类
2.继承
3.写构造方法
4.在方法中的继承
5.测试
总结
关于异常我们以后常见的是Exception,Error基本见不到,一旦遇到赶紧处理。
要分清楚编译期异常和运行期异常都有哪些,运行异常run…
分清楚:捕获异常,抛出异常,都有什么特点
自定义异常,在后期写项目的处理最佳方案顺其自然。