异常

1.throw关键字:

  • 1.作用:
    • 可以使用throw关键字在指定的方法中抛出指定的异常
  • 2.使用格式:
    • throw new xxxException(“异常产生的原因”)
  • 3.注意:
    • 1.throw关键字必须写在方法的内部
    • 2.throw关键字后边new的对象必须是Exception或者它的子类
    • 3.throw关键字抛出指定的异常对象,我们就必须处理这个对象
    • 4.throw关键字后边创建的是RuntimeException或者它的子类,我们可以不处理,把他交给jvm处理
    • 5.throw关键字后边创建的是编译异常,我们就必须处理这个异常,要么throws,要么try…catch

2.异常处理的第一种方法:交给别人处理

  • 1.当方法内部抛出异常对象时,我们必须处理这个对象
  • 2.可以使用throws关键字处理异常,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理)最终交给JVNM进行中断处理
  • 3.使用格式:
 修饰符 返回值类型 方法名(形参列表) throws XXXException,...{
     throw new XXXException("产生原因");
     。。。
 }
  • 4.注意:
    • 1.throws关键字必须写在方法声明处
    • 2.throws关键字后边声明多个异常必须是Exception或者它的子类
    • 3.方法内部如果抛出多个异常,那么throws后边必须也声明多个异常
      如果抛出的多个异常对象有子父类关系,那么直接声明父类即可
    • 4.调用一个声明抛出异常的方法,我们就必须处理声明的异常
      ①要么继续使用throws声明抛出,将诶方法的调用者,最终由JVM处理
      ② 要么try…catch自己处理异常
      在这里插入图片描述

3.Objects非空判断

  • requireNonNull()是Objects类中的静态方法:(需要用类名进行访问)
  • public static requireNonNull(T obj):查看指定对象是不是null
  • public static requireNonNull(T obj,String str):查看指定对象是不是null,str也会随异常一同打印在控制台
 源码:
     public static <T> requireNonNull(T obj){
         if(obj==null){
             throw new NullPointerException();
         }
         return obj;
     }
public class Demo02Exception {
    public static void main(String[] args) {
        method(null);
    }
    public static void method(Object obj) {
        //对传递过来的参数进行合法性判断,判断是否为null
        /*
        if(obj==null){
            throw new  NullPointerException("传递的参数为空");
        } */
        //Objects.requireNonNull(obj);//不要需要自己再写判空语句
        Objects.requireNonNull(obj,"传递的参数为空");

    }
}

在这里插入图片描述
4.异常处理的第二种方式:自己处理异常

  • 1.格式:
 try{
     可能产生异常的代码
 }catch(定义一个异常的变量,用于接收try中抛出的异常){
     异常的处理逻辑,产生异常对象后怎么处理
     一般在工作中,会把异常的信息记录到一个日记中
 }
 ...
 catch(异常类名 变量名){
}
  • 2.注意:
    • 1.try中可能抛出多个异常对象,那么久可以使用多个catch来处理异常对象
    • 2.①如果try中产生啦异常,异常代码后边的代码不会执行,而是去执行catch中的异常处理逻辑,执行完毕catch中的异常处理逻辑,继续执行tyr…catch 之后的代码
    • ②如果没有出现异常,那么就不执行catch的异常处理逻辑,执行完try中的代码后,直接执行try…catch之后的代码

示例

public class Demo04Exception {
    public static void main(String[] args) {
        try{//可能出现异常的代码
            readFile("d:\\a.tx");
        }catch (IOException e){//异常处理的逻辑代码
            System.out.println("传递的文件后缀名不对");
        }
        System.out.println("后续代码");
    }

    /*
    如果传递的路径,不是.txt
    那么我们就抛出异常,告知调用者,文件名后缀不对
     */
    private static void readFile (String fileName) throws IOException {
        if(!fileName.endsWith(".txt")){
            throw  new IOException("文件名后缀不对");
        }
        System.out.println("路径没有问题");
    }
}

在这里插入图片描述
运行结果分析:
①可以看出,左边的主方法由于传入的文件名不对,出现的异常,但我们可以看到它的后续代码块依旧有被执行,原因是这个异常是由主方法自己捕获并且处理,并没有交给JVM做中断处理。
②右边的主方法由于并没有出现异常,所以只执行了try里边的和后续的代码,并没有进行异常的处理.
5.Throwable异常类:

定义啦三个对异常对象的处理方法:

  • String getMessage()–返回throwable 的简短描述
  • String toString()–重写啦Object类的toString方法
  • void printStackTrace()–最全面的异常描述
 System.out.println(e.getMessage());//文件名后缀不对
 System.out.println(e.toString());//java.io.IOException: 文件名后缀不对
 e.printStackTrace();
            /*
            java.io.IOException: 文件名后缀不对
	        at Demo04Exception.readFile(Demo04Exception.java:42)
	        at Demo04Exception.main(Demo04Exception.java:26)
             */

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值