10异常

1.什么是异常

 

 在java中针对问题的反馈以及处理的一套机制。

2.具体介绍

异常分两种:

Exception:是一个合理的应用程序,出现之后可以处理也可以不处理。jvm发生,并告诉使用者。可以进行针对性处理

Error:是一个合理(符合语法且代码执行逻辑没有问题)的应用程序,由系统底层发生的,告诉jvm,jvm告诉使用者问题严重,如果一旦发生,不做针对性处理的解决途径只有一个:修改代码 不如内存溢出

它两的父类:Throwable:定义了对于问题的共性的功能。所有问题异常的超类

3.Exception分类

1.运行时异常----编译没错,运行有错 可以处理也可以不处理 总的运行时异常父类是 RuntimeException

2.编译时异常---编译有错,一定要处理(抛出或者捕获)

4.自定义异常

public class ExceptionDemo2 {
    
    public static void main(String[] args) {
        //读取文件内容
        //方法抛出的异常,方法的调用者需要进行异常的处理
        //try块---存放可能会出错的代码
        //如果try块出错了就用catch块进行捕获处理
        //try-catch一定会直接结束,执行下一个语句
        //方法上抛出了几个编译时异常就处理几个编译时异常
        try {
            String s=readTxt(null);//要读取的是.txt
            //捕获的是异常类的对象
        } catch (PathNotExitsExption e) {//new PathNotExitsExption()
            // TODO Auto-generated catch block
            //处理异常
            System.out.println(e.getMessage());
        }catch(FileNotExitsException e){
            //处理异常
            System.out.println(e.getMessage());//父类属性
        }catch(NullPointerException e){
            //打印异常的栈轨迹
            e.printStackTrace();
        }
        //读取完成
        //当异常捕获之后后面的代码正常执行
        System.out.println("读取文件完毕。。");
    }
    //方法上抛出异常---可以抛出多个异常
    //方法上必须抛出的异常时编译时异常
    public static String readTxt(String path) throws PathNotExitsExption, FileNotExitsException,NullPointerException{
        //判断参数是否为null
        if(path==null){
            //反馈问题
            //可以处理也可以不处理
            throw new NullPointerException("亲,参数为null...");
        }
        
        //可能文件类型不对
        //对文件类型进行判断
        if(!path.endsWith(".txt")){//不是txt的文件类型都会进来
            //反馈问题
            throw new FileNotExitsException("亲,文件类型有问题...");
        }
        //可能会出现文件所在路径不存在
        //对路径进行判断
        if(path.startsWith("H")){//如果以H盘符开头就不存在
            //问题的反馈
            //抛出异常---后面所有代码都不执行    ----抛出一个异常类对象
            throw new PathNotExitsExption("亲,你的路径有问题...");
        }
        //开始读取文件内容..
        return "文件的内容";
    }
}

//自定义异常类  继承异常类
//如果不继承RuntimeException就是编译时异常
class PathNotExitsExption extends Exception{
    //属性
    private String message;
    //有参构造
    public PathNotExitsExption(String message) {
        // TODO Auto-generated constructor stub
        this.message=message;
    }
    //
    public String getMessage(){
        return message;
    }
}

//自定义异常类
class FileNotExitsException extends Exception{
    //
    public FileNotExitsException(String message) {
        // TODO Auto-generated constructor stub
        super(message);//调用父类有参构造,给父类属性赋值
    }
}

5 throw和throws

6.捕获的方式

1.所有捕获异常可以用他们的公共父类来处理

try {
            String s=readTxt(null);//要读取的是.txt
            //捕获的是异常类的对象
        } catch (Exception e) {//可以统一处理捕获的不同异常
            // TODO Auto-generated catch block
            //处理异常
            System.out.println(e.getMessage());
        }

2.抛出的所有异常进行单独处理,在catch块中进行单独的捕获与处理

 

 try {
            String s=readTxt(null);//要读取的是.txt
            //捕获的是异常类的对象
        } catch (PathNotExitsExption e) {//new PathNotExitsExption()
            // TODO Auto-generated catch block
            //处理异常
            System.out.println(e.getMessage());
        }catch(FileNotExitsException e){
            //处理异常
            System.out.println(e.getMessage());//父类属性
        }catch(NullPointerException e){
            //打印异常的栈轨迹
            e.printStackTrace();
        }

 

3.在jdk1.7以后有个分组的概念,可以按照分组来处理各组的异常

 

    try {
            String s=readTxt(null);//要读取的是.txt
            //捕获的是异常类的对象
        } catch (PathNotExitsExption |FileNotExitsException |NullPointerException e) {//new PathNotExitsExption()
            // TODO Auto-generated catch block
            //处理异常
            System.out.println(e.getMessage());
        }

 

抛出的异常希望进行分组处理,jdk1.7提供分组捕获,一组之间的异常通过在catch之间用|连接

 

7.异常捕获后的异常信息显示

8.父类的异常捕捉要放到子类的最后面,这就相当于捕获到剩下没有捕获的异常

    try {
            String s=readTxt(null);//要读取的是.txt
            //捕获的是异常类的对象
        } catch (PathNotExitsExption e) {//new PathNotExitsExption()
            // TODO Auto-generated catch block
            //处理异常
            System.out.println(e.getMessage());
        }catch(FileNotExitsException e){
            //处理异常
            System.out.println(e.getMessage());//父类属性
        }catch(NullPointerException e){
            //打印异常的栈轨迹
            e.printStackTrace();
        }
        catch (Exception e) {
            System.out.println("放最后没错,放前面会报错");
        }

9.finally块无论代码有没有出现异常,finally块里面的代码都是要执行的

posted @ 2019-07-18 15:58  三十六烦恼风x  阅读(198)  评论(0编辑  收藏  举报