API—Exception异常类概述分析

异常类: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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值