异常类:Throwable类—异常的顶级父类
异常的处理:要么抛出要么处理,只有两种方式,没有其他的方式
异常的抛出:方法上可以连续抛出多个异常,异常之间使用逗号进行分割
抛出异常的格式:throw new xxxException(); throw是关键字
编译时异常一定要处理,运行时异常可以进行处理也可以不进行处理;
**子类:Error Exception**
异常的工作机制:发现问题----反馈问题—处理问题
主要异常:
1. 编译时异常---一定要进行处理
除了RuntimeException类以及子类以外其他的异常类
2. 运行时异常---在运行时出错,可以处理也可以不进行处理
RuntimeException类以及子类的其他异常类
异常机制:java程序为保证程序正常运行而建立的一种机制,能够在程序产生不是预期的结果的时候进行处理和抛出
异常处理的两种方式:
1.捕获异常进行相关的处理应用逻辑:
使用try--catch()语句进行捕获,try代码块中存放的是可能出现异常代码的信息,catch代码块中进行实时监测try中的异常信息,出现异常则进行捕获并进行处理
2.处理逻辑:将异常对象不断的向上进行抛出,直接抛出的话是由jvm虚拟机进行处理,使用try-catch代码块的话则是进行相关的处理逻辑,由用户进行处理(称之为自定义的处理);
3.catch(异常对象);括号中的对象则是底层进行向上抛出的异常对象,此时由异常对象进行打印或者处理相关的异常提示信息,此时的对象即为底层抛出的异常对象
4. ***打印错误信息的判断方式在控制台***:从下往上进行查找,因为java程序依赖于底层进行实现,一个一个的依赖,如果最底层出现问题那么往上的程序一定不能进行正常运行
异常的默认打印方式称之为打印栈的轨迹如下所示:
catch (FileNotIsExistException e) {
//打印栈的轨迹,进行错误信息,打印栈轨迹的信息模型,一定要从下往上进行看错误的信息
//信息的产生操作的是底层的关系,所以底层错误从底层开始持续向上打印
e.printStackTrace();
//获取异常的信息
String message = e.getMessage();
System.out.println(message);
}
try {
//try代码块里面包含可能会产生异常的信息,进行包裹
String str= readFile("C:\\a.txt");
//catch会实时监测try中的代码,如果出现异常则进行捕获,类的性质是一模一样的
} catch (FileNotIsExistException e) {
//打印栈的轨迹,进行错误信息,打印栈轨迹的信息模型,一定要从下往上进行看错误的信息
//信息的产生操作的是底层的关系,所以底层错误从底层开始持续向上打印
e.printStackTrace();
//获取异常的信息
String message = e.getMessage();
System.out.println(message);
} catch (FileNotFoundeException e) {
//向上传递异常,获取异常的描述信息
String message = e.getMessage();
System.out.println(message);
}
自定义异常:
1.自定义异常一般都是运行时异常,使用面向对象的形式进行继承Exception类
2.底层的Exception提供相关的异常机制,私有化的属性message(通过构造方法Exception(String messsge)进行传递异常信息)—**super(message)**能让用户打印提示自己的错误信息,也可以进行私有化提供属性的方式
3.实现自定义异常的时候进行异常对象的不断向上传递,最终抛出进行处理
完整的自定义异常代码如下:实现通过构造方法和自定义提供外部属性的方式
public class ExceptionDemo2 {
public static void main(String[] args) {
try {
//try代码块里面包含可能会产生异常的信息,进行包裹
String str= readFile("C:\\a.txt");
//catch会实时监测try中的代码,如果出现异常则进行捕获,类的性质是一模一样的
} catch (FileNotIsExistException e) {
//打印栈的轨迹,进行错误信息,打印栈轨迹的信息模型,一定要从下往上进行看错误的信息
//信息的产生操作的是底层的关系,所以底层错误从底层开始持续向上打印
e.printStackTrace();
//获取异常的信息
String message = e.getMessage();
System.out.println(message);
} catch (FileNotFoundeException e) {
//向上传递异常,获取异常的描述信息
String message = e.getMessage();
System.out.println(message);
}
System.out.println("读取完成");
}
//方法上可以抛出多个异常(中间使用逗号进行分割)
//如果方法上必须要抛出异常就是编译时的异常
private static String readFile(String path) throws FileNotIsExistException, FileNotFoundeException {
//进行异常的操作
if (!path.startsWith("W")){
//进入判断,则表示进入的盘符的不正确,进行路径不正确的判断
throw new FileNotIsExistException("文件的路径传输不正确,请检查文件路径!");
}
if (!path.endsWith(".avi")){
//进入判断说明文件没有找到进行异常的抛出
throw new FileNotFoundeException("文件不存在,请重新查找文件!");
}
if (path==null){
//进入判断说明path为null,m没有给任何的字符引用
//发现问题,反馈问题
throw new NullPointerException("路径名为空!");
}
return "文件内容";
}
}
class FileNotIsExistException extends Exception{
//实现自定义异常
private String message;
@Override
public String getMessage() {
return message;
}
//实现自定义异常向上进行传递的过程,通过设定的私有属性进行异常的不断向上的传递
public FileNotIsExistException(String message) {
this.message = message;
}
}
//自定义异常类可以用于前端web发生异常的时候进行判断
class FileNotFoundeException extends Exception{
public FileNotFoundeException(String message){
//调用父类的有参构造方法---自定义异常,子类可以调用父类的方法
//父类的私有化属性进行传递属性的信息
super(message);
}
}