异常
java中代码运行时出现的问题大致分为两类:
错误:error
语法逻辑导致的程序运行问题
异常:exception
基于java健壮性有代码书写、运行时进行提升的异常
Java异常是一个描述在代码段中发生的异常(也就是运行时出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw,或称为抛出)。该方法可以选择自己处理异常或传递该异常。
如果进行了异常的处理那么,在出现异常时不会终止程序的运行
异常体系结构
java把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsJJAIhz-1605616361995)(img\image-20201023094956067.png)]
异常的分类
①编译时异常(受检异常)
由java虚拟机在程序编写时进行健壮性检查,当某一方法可能出现问题是需要显式的解决后才能继续编写
②运行时异常(非受检异常)
由java虚拟机在程序运行时进行健壮性操作,当某一方法执行过程中出现不正当操作时出现提示,无需显式解决
异常的处理
由五个关键字 try、catch、throw、throws 和 finally 处理。
Java 中可用于处理异常的两种方式:
自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。
使用try catch finally关键字进行异常处理
SimpleDateFormat sdf = new SimpleDateFormat("asdasd");
try {
// 使用try{}包裹可能出现问题的代码
System.out.println(sdf.parse("2021"));
// 当发生异常时会创建相应的异常对象
} catch (ParseException e) {
System.err.println("解析错误!");
// catch(异常)
// 与try块内生成的异常进行比较匹配则执行相应代码
return;
} finally {
// 最终执行
// 写在finally中的代码无论是否发生异常都会执行
//常用来释放资源
System.out.println("最终执行");
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87JDDBOp-1605616361999)(img\image-20201023104140049.png)]
异常类常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZ5aNVmR-1605616362002)(img\image-20201023102054961.png)]
回避异常:通知潜在调用者,如果发生了异常,必须由调用者处理。
在发生异常的方法上使用throws关键字进行异常的抛出,谁调用这个方法谁处理
public static void main(String[] args) throws ParseException {
//方法中出现throws以及异常类代表这个方法执行时可能出现的异常,需要调用方进行处理
自定义异常
自定义的异常类是由开发人员根据需求开发的异常类.
程序中使用自定义的异常类,通过自定义异常类可以让开发人员更加方便的定位程序出错的位置且更加详细的描述异常信息。
异常简单分为两类,那么自定义异常也简单分为两类:
自定义受检异常
创建类继承Exception
//自定义受检异常
//创建自定义异常类继承Exception
public class MyException extends Exception {
// 创建有参构造方法将异常信息传入异常类
// 调用父类构造方法传入数据
public MyException(String msg) {
super(msg);
}
}
自定义运行时异常
创建类继承RunTimeException
//自定义运行时异常
//创建自定义异常类继承RuntimeException
public class MyRuntimException extends RuntimeException{
// 创建有参构造方法将异常信息传入异常类
// 调用父类构造方法传入数据
public MyRuntimException(String msg) {
super(msg);
}
}