第六章异常(2)

学习目标:

掌握异常

学习内容:

1、 finally 2、 throws 3、 throw 4、 自定义异常

学习时间:

2021年6月6日

学习产出:

1、 技术笔记 1 遍 2、CSDN 技术博客 2 篇

Finally

         try {
               可能出现异常的代码
           }catch(异常类型  e  用来接收抛出的异常对象){
                  捕获处理发生的异常
           }finally{
                   无论是否出现异常,代码都会执行
           }
            后续程序继续执行

如果没有catch:try+finally 一旦出现异常,会执行finally ,之后程序崩掉了

throws

throws,定义一个方法的时候可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用处进行处理。

任何方法都可以使用throws关键字声明异常类型,包括抽象方法。

子类重写父类中的方法,子类方法不能声明抛出比父类类型更大的异常(针对编译期异常)。

public abstract class ExceptionDemo4 {
      
      abstract void eat() throws Exception;

}

public class Demo extends ExceptionDemo4 {

    /*
      方法重写父类方法
       返回值,方法名,参数必须一样
       访问权限修饰符 大于等于父类方法权限
       声明的异常必须小于或等于父类声明的异常
     */
    @Override
    public void eat() throws UnsupportedEncodingException,Exception {

    }
}

使用了throws的方法,调用时必须处理声明的异常,要么使用try-catch,要么继续使用throws声明。

        public static void main(String[] args) {
        try {
            test1();
        } catch (UnsupportedEncodingException e) {
            System.out.println("编码不支持");
        }catch (ParseException p){
            System.out.println("日期解析异常");
        }catch (NullPointerException n){
            System.out.println("对象为空");
        }
        System.out.println("aaaaa");
    }

    public  static void test1() throws UnsupportedEncodingException, ParseException {
        test2();
    }

    public  static void test2() throws UnsupportedEncodingException, ParseException {
        test3();
    }

    /*
    throws NullPointerException 运行时异常 声明为运行时异常,方法调用处可以处理也可以不处理
           UnsupportedEncodingException 声明为编译期异常,那么调用在编译期间必须处理
           一般情况下,throws后面一般都声明的是编译期异常明抛出
           一般情况下,位于底层的方法都选择向上声
     */
    public  static void test3() throws NullPointerException, UnsupportedEncodingException, ParseException {
           String s = "中国";
           s.getBytes("gbk");

        SimpleDateFormat sdf = new SimpleDateFormat("");
        sdf.parse("");
    }

throw

throw关键字用于显式抛出异常,抛出的时候是抛出的是一个异常类的实 例化对象。

在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。

public static void main(String[] args) {
            //System.out.println(10/0);//由虚拟机在运行时出现异常,抛出一个此类的对象
            /*
            Exception in thread "main" java.lang.ArithmeticException: / by zero
	           at com.ff.javaexception.day2.ExceptionDemo5.main(ExceptionDemo5.java:7)
             */

            try {
                  subFileType(null);
            } catch (Exception e) {
                  e.printStackTrace();
                  System.out.println(e.getMessage());
            }

      }


      public static String subFileType(String fileName){
            if(fileName==null){
                //在方法体中,主动显示的抛出一个对用的异常对象,告知(通知)方法调用处,传入的数据有问题
               throw new NullPointerException("文件名为null了");
            }
         return fileName.substring(fileName.lastIndexOf(".")+1);
      }

throws和throw

throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常 。

throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是

多个异常类型,用来强制调用该方法时处理这些异常。

抽象方法也可以使用throws。

自定义异常

作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆。

基本语法 :

public class 异常类名 extends Exception/RuntimeException{

​ public 异常类名(String msg){

​ super(msg);

​ }

}

自定义异常类中往往不写其他方法,只重载需要使用的构造方法

继承Exception,在方法中使用throw抛出后,必须在方法中try-catch或

throws抛出。

/*
   自定义异常类
   分数异常类
 */
public class ScoreException extends Exception{
    
    public ScoreException() {
        super();
    }

    public ScoreException(String msg) {
        super(msg);
    }
}
public class Test {

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList(3);
        arrayList.add(11);
        arrayList.add(11);
        arrayList.add(11);
        arrayList.add(11);
        try {
            score(-10);
        } catch (ScoreException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }


    public static  String score(double score) throws ScoreException {
             if(score<0){
                throw  new ScoreException("分数小于0了");
             }
             if(score>100){
                 throw  new ScoreException("分数大于100了");
             }
             if(score>=90){
                 return "A";
             }
             return "D";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值