throw exception和 try catch的区别

throw、throws、try-catch的区别

try catch 和throw以及throws的使用

throw exception和 try catch的区别

异常注意事项

  • 运行时异常被抛出可以不处理。即不捕获也不声明抛出。
  • 父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出

1. 区别:

  • throw exception直接终止方法,或者退出循环。

  • try catch还要继续处理方法余下的逻辑,或者不结束循环。

try catch 不中断,throw exception中断

CSDN红色字体,蓝色字体,字体大小设置

1.throw

throw 就是抛出一个异常,并获取这个异常的引用,这个异常会被抛到外部的环境,由外部环境进行处理

class A{
    public void func() throws Exception{
        throw new Exception();
    }
}
package cn.itcast.test;

public class TryTest2 {
    public static void main(String[] args) {

        tryTest();

    }

    private static void tryTest() throws RuntimeException {
        try {

            int i = 100 / 0;

            System.out.print(i);

        } catch (Exception e) {

            System.out.print(1);

            throw new RuntimeException();

        } finally {

            System.out.print(2);

        }

        System.out.print(3);
    }

}

在这里插入图片描述
try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。

本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,

因此执行完finally语句块之后,程序终止了

首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。

如果catch中没有抛出RuntimeException,则执行结果为123。

在这里插入图片描述
在这里插入图片描述
或者在catch中再次捕获
在这里插入图片描述
在这里插入图片描述

package cn.itcast.test;

public class TryTest {
    public static void main(String[] args) {
        //创建一个数组
        int[] arr = {2,4,52,2};
        //根据索引找对应的元素
        int index = 4;
        int element = getElement(arr, index);

        System.out.println(element);
        System.out.println("over");

    }
    /*
     * 根据 索引找到数组中对应的元素
     */
    public static int getElement(int[] arr,int index){
        //判断  索引是否越界
        if(index<0 || index>arr.length-1){
             /*
             判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。
             这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。
              */
            throw new ArrayIndexOutOfBoundsException("哥们,角标越界了~~~");
        }
        int element = arr[index];
        return element;
    }
}

在这里插入图片描述
加上try catch
在这里插入图片描述
在这里插入图片描述

2.throws

那我们就不得不说一下throws,其实throws并不是抛出一个实际的Exception而是一个异常声明,它声明这个方法可能会抛出一个异常,注意是可能,所以在没有异常的情况下也是可以用throws的,而throws本身的作用也是用来提高程序的健壮性,反过来,如果这个方法的的确确的有一个异常,那么编译器会强制让你加上throws这个异常声明。

通常throws是写在参数列表的后面,这样就表明这个方法有可能会抛出一个异常

class A{
    public void func() throws Exception{
        throw new Exception();
    }
    
    public void g() throws Exception{
        
    }
}

3.try…catch

当我们在其环境中调用func 和 g的时候,编译器会通知我们需要用一个Try catch程序块来处理这个异常。

这个程序块分两块,第一块是try{} ,第二块是catch(exception的引用){}
try这个程序块很有意思,因为它的名字很易懂,就是尝试,尝试能不能正常的走完整个作用域,如果不能则抛出一个异常。所以我们在try块里经常放上可能会抛出异常的程序段。
而catch恰好就是处理try里抛出来的异常,其中catch的参数列表接收的是一个异常的引用,是throw抛出来的异常的引用,这样我们就可以得到这个异常的对象,倒不如说我们是得到来了这个异常对象的引用,因为在java里,通常我们也只能通过引用来操纵对象。

PS:当 throw new RuntimeException的时候,不用throws

public class Main {
    public static void main(String[] args){
        A a = new A();
        try{
            a.func();
            a.g();
        }
        catch(Exception e){
            System.out.println("捕获了一个异常");
        }
    }
}

我们捕获了func 的异常,因为我们明确的指明func 会抛出一个异常throw new Exception();所以我们这里也会捕获到,并去处理它,所以运行起来我们会看到控制台上会打印“捕获了一个异常”。

尽管g()没有抛出任何的异常,编译器还是要求我们要用try catch把它括起来,是因为它拥有一个throws 异常说明。

4.常见的异常

输入输出异常:IOException
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException

操作数据库异常:SQLException

文件未找到异常:FileNotFoundException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
字符串转换为数字异常:NumberFormatException
方法未找到异常:NoSuchMethodException

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
try catchthrowJava中用于异常处理的关键字。 引用和引用提到了 throws 关键字,它用来声明一个方法可能会抛出一个异常。throws并不是抛出一个实际的 Exception,而是一个异常声明,用来提高程序的健壮性。如果方法确实会抛出异常,编译器会强制要求加上 throws 异常声明。 引用提到了 trycatch 关键字。try 用来包裹需要检测异常的代码块,如果在 try 块中发生异常,那么紧接着的 catch 块会捕获该异常,并执行相应的处理操作。catch 中的代码会在捕获到异常后执行,而 try 块中异常发生后的代码不会执行。如果 catch 块中没有 throw 抛出错误,那么 try catch 外面的代码会继续执行。 综上所述,try catch 是用来处理异常的结构,try 块中的代码可能会抛出异常,如果抛出了异常,catch 块会捕获并处理异常。throws 关键字用于声明方法可能会抛出的异常。这些关键字在 Java 中可以提高程序的健壮性和错误处理能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [try catchthrow区别](https://blog.csdn.net/Assassin660/article/details/113269975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Javatry-catch,throwthrows的使用](https://blog.csdn.net/daxiong0816/article/details/121868890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [错误处理:try/catchthrow](https://blog.csdn.net/weixin_50576800/article/details/119982423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值