Java异常

异常的概念

 

异常与错误

异常的产生过程分析(分析如何产生,如何处理)

异常处理的两种方式

        方式一:throws声明抛出异常,交给别人处理

/*
    throws关键字:异常处理的第一种方式,交给别人处理
    作用:当方法内部抛出异常的时候,我们必须处理这个异常对象
         可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的
调用者处理(自己不处理,交给别人处理),最终交个JVM处理--》【中断处理】
    【throws关键字须和throw关键字配套使用,抛出异常,就必须处理异常】
    格式:在方法声明时使用
         修饰符 返回值类型 方法名(参数列表) throws{
            throw new AAAException(“产生原因“);
            throw new BBBException(“产生原因“);
            ...
         }
    注意:1.throws必须写在方法声明处
         2.声明的异常必须是Exception或和Exception子类
         3.方法内部抛出多个异常对象,那么throws后边也必须声明多个异常
            如果抛出的多个异常有父子类关系,直接声明父类异常即可
         4.调用一个声明抛出异常的方法,就必须处理声明的异常
           要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM
           要么try...catch自己处理异常
 */
public class DemoD {
    public static void main(String[] args) throws Exception{//在方法声明多个异常
//        readFile("C:\\a.xt");

    }

    /*
        定义一个方法,对传递的文件路径进行合法性判断
        如果路径不是“C:\\a.txt”,那我们就抛出文件找不到异常对象,告知方法的调用者
        注意:FileNotFoundException是编译异常,抛出编译异常,就必须处理这个异常
             可以使用throws继续声明抛出FileNotFoundException这个异常对象,让方法的调用者处理
     */

    //如果抛出的多个异常有父子类关系,直接声明父类异常即可
//    public static void readFile(String fileName) throws FileNotFoundException,IOException{//在方法声明多个异常
//    public static void readFile(String fileName)throws IOException{
    public static void readFile(String fileName)throws Exception{//Exception是所有异常的父类
        //抛出文件路径异常
        if (!fileName.equals("C:\\a.txt")){
            throw new FileNotFoundException("传递文件的路径不是“C:\\\\a.txt”");
        }
        //抛出文件路径不是.txt结尾异常
        if (!fileName.equals(".txt")){
            throw new IOException("文件后缀名不对");
        }

        System.out.println("路径没有问题,读取文件");
    }
}

        方式二:try...catch...finally,手动处理

/*
    异常处理的第二种方式,自己处理异常
    try...catch...finally
    格式:
        try{
            可能发生异常的代码
        }catch(异常类型 异常名e){
            处理异常的代码(一般都是打印异常的信息的语句)
        }
        ...
        catch(异常类型 异常名e){

        }finally {

        }

    注意:
    1.try中可能会抛出多个异常对象,那么就可以使用多个catch处理这些异常对象
    2.如果try中产生了异常,那么就执行catch中的异常处理逻辑,执行结束后,继续执行try...catch后的代码
      如果try中没有产生异常,那么就不会执行catch中的异常处理逻辑,执行结束后,继续执行try...catch后的代码
    3.finally不能单独使用,一般用于资源释放(资源回收),无论程序是否出现异常,都要资源释放(IO)
 */
public class DemoE {
    public static void main(String[] args) {
        try {
            //可能产生异常的代码
            readFile("c:\\c.txt");
        } catch (FileNotFoundException e) {//try中抛出什么异常对象,catch就定义什么异常变量,用来接收这个异常对象
            //异常的处理逻辑
//            System.out.println("catch~传递的路径不是c:\\a.txt");
//            System.out.println(e);//java.io.FileNotFoundException: 传递的文件路径不是c:\a.txt
//            System.out.println(e.getMessage());//传递的文件路径不是c:\a.txt
//            System.out.println(e.toString());//java.io.FileNotFoundException: 传递的文件路径不是c:\a.txt
            e.printStackTrace();
        } finally {
            //无论是否出现异常,都会执行
            System.out.println("资源释放");
        }
        System.out.println("后续代码");

    }

    public static void readFile(String fileName) throws FileNotFoundException {
        if (!fileName.equals("c:\\a.txt")) {
            throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");
        }
        System.out.println("路径没有问题,读取文件");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值