try catch和Throws处理异常的区别与自定义异常

1 篇文章 0 订阅

try catch用于包含代码块,是指在当前方法中就处理异常

Throws用于方法外部,表示将异常抛给方法的调用者,如果上层没有处理,就继续往上(上一层的调用者)抛,直到处理了异常,或者直到抛给JVM

下面用一个例子来说明区别

public class Test {
    public static void main(String[] args) {
        try {
            test1(); //调用test1
        } catch (Exception e) {
            System.out.println("-----main方法使用try catch处理了异常-----");
//            e.printStackTrace();
        }
    }
    public static void test1() throws Exception {
        test2(); //调用test2
    }
    public static void test2() throws Exception {
        test3(); //调用test3
    }
    public static void test3() throws Exception { //将异常往调用者抛
        System.out.println("-----test3"+"抛出了一个异常-----");
        throw new Exception(); // 抛出一个异常
    }
}

在这里插入图片描述

自定义异常

① 创建一个类,继承Exception类 (所有的异常类都继承自Throwable类)

public class TestException {
    public static void main(String[] args) {
        System.out.println(add(1.2));
    }
    public static int add(Object object){
        if(object instanceof Integer){   // instanceof: 判断是否是该类型,这里是判断object是否是Integer类型
            int num = (int) object; //将object转换成int
            return ++num;
        }
        else {
            String error="传入的参数不是整数类型";
            MyException myException = new MyException(error);
            try {
                throw myException; // 抛出自定义异常
            } catch (MyException e) {
                System.out.println("抛出了自定义异常");
               // e.printStackTrace();
            }
            return 0;
        }
    }
}

在这里插入图片描述

运行时异常与编译时异常

在Java中,异常分类有运行时异常和编译时异常,两者的不同处顾名思义,但其实还有更深层次的不同;

  • 运行时异常

在Java中,有一个类RuntimeException用于检测运行时异常
在这里插入图片描述
当要标记一个异常是运行时异常时,那么就要继承RuntimeException这个父类,比如空指针异常、数组下标越界异常等;
在这里插入图片描述

运行时异常在编译的时候不会出错,但是程序运行时会报错

当运行时异常报错之后,如果没有try catch捕获,那么就会终止当前的线程

  • 编译时异常

编译时异常不同于RuntimeException,一般是直接继承Exception类;
在这里插入图片描述
编译时异常需要在写代码的时候捕获,如果不捕获那么就不能编译通过;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值