Java捕获和抛出异常

大家好,分享一下Java捕获和抛出异常

上代码:

package Exception;

public class Test {
    public static void main(String[] args) {
        //写一个程序来模拟异常

        int a =1;
        int b  =0;
        //定义变量并赋值
        System.out.println(a/b);      //被除数不可以为0,所以程序会有异常
    }
}

看结果

在这里插入图片描述

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

下面,我们来捕获这个异常

package Exception;

public class Test {
    public static void main(String[] args) {
        //写一个程序来模拟异常

        int a =1;
        int b  =0;
        try {     //try监控区域
            //定义变量并赋值
            System.out.println(a / b);      //被除数不可以为0,所以程序会有异常
        }catch (ArithmeticException e) {     //catch捕获异常
            System.out.println("程序出现异常,变量b不能为0");
        }finally {     //处理善后工作,可以不加这个
       
            System.out.println("finally");

        }
    }
}

注意点:

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

看结果:

在这里插入图片描述

这样的话,是无法捕捉到异常

package Exception;

import struct.TestDemo01;

public class Test {
    public static void main(String[] args) {
        //写一个程序来模拟异常

        int a =1;
        int b  =0;
        try {
            //定义变量并赋值
            new Test().a();
        //    System.out.println(a / b);      //被除数不可以为0,所以程序会有异常
        }catch (ArithmeticException e) {     //catch捕获异常
            System.out.println("程序出现异常,变量b不能为0");
        }finally {     //处理善后工作
            System.out.println("finally");

        }


        }
        public void a(){
        b();
    }
    public void b(){
        a();
    }
}

看运行结果

在这里插入图片描述
finally 照常执行

这是多重捕获语法格式:

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

这个要注意下面的要点:

上面的代码段包含了 3 个 catch块。

可以在 try 语句后面添加任意数量的 catch 块。

如果保护代码中发生异常,异常被抛给第一个 catch 块。

如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个 catch 块。

如此,直到异常被捕获或者通过所有的 catch 块。

代码实例

package Exception;

import struct.TestDemo01;

public class Test {
    public static void main(String[] args) {
        //捕获多个异常
        

        int a =1;
        int b  =0;
        try {
            //定义变量并赋值

          System.out.println(a / b);      //被除数不可以为0,所以程序会有异常
        }catch (ArithmeticException e) {     //catch(想要捕获的异常类型)捕获异常
            System.out.println("Error");
        }catch (Exception e) {
            System.out.println("Exception");
        }catch ( Throwable t){
            System.out.println("Throwable");
        }finally {     //处理善后工作
            System.out.println("finally");

        }


        }
        public void a(){
        b();
    }
    public void b(){
        a();
    }
}

显示结果

在这里插入图片描述

再写一个

package Exception;

public class Test2 {
    public static void main(String[] args) {
        int a=1;
        int b=0;
        //Ctrl+Alt+T

        try {
            System.out.println(a/b);    // //Ctrl+Alt+T 选择代码块
        } catch (Exception e) {
            e.printStackTrace();
        }   finally {
            
        }
    }
}
package Exception;

import struct.TestDemo01;

public class Test {
    public static void main(String[] args) {
        //捕获多个异常


        int a =1;
        int b  =0;
        try {
            if (b==0){      //这个判断条件不符合逻辑     throw      thr
              throw new ArithmeticException();              //所以我们主动的抛出异常     throw      throws


            }
            //定义变量并赋值

          System.out.println(a/b);      //被除数不可以为0,所以程序会有异常
        }catch ( Exception e) {     //catch(想要捕获的异常类型)捕获异常
            System.out.println("Error");
     //   }catch (Exception e) {
            System.out.println("Exception");
        }catch ( Throwable t){
            System.out.println("Throwable");
        }finally {     //处理善后工作
            System.out.println("finally");

        }


        }
        public void a(){
        b();
    }
    public void b(){
        a();
    }
}

看代码
在这里插入图片描述
好了,关于Java捕获和抛出异常就讲到这里了,谢谢大家

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思诚代码块

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值