Java捕获和抛出异常-程序员宅基地

技术标签: java  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捕获和抛出异常就讲到这里了,谢谢大家

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47556601/article/details/122641156

智能推荐

【爬虫实战】python文本分析库——Gensim-程序员宅基地

文章浏览阅读2.1k次,点赞25次,收藏37次。Gensim 允许你使用 TF-IDF 权重和其他算法来提取文档中的关键词。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。_gensim

Android分享一张图片_android 分享一张图片到basequickadapter中-程序员宅基地

文章浏览阅读1k次。public class Act_Share extends Activity { private ShareCustomAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(_android 分享一张图片到basequickadapter中

Linux所有服务开放对应端口大全_linux服务器端口全部开放-程序员宅基地

文章浏览阅读4.7k次。Linux所有服务开放对应端口大全_linux服务器端口全部开放

php连接mysql实现简单注册登陆页面_php连接数据库登录和注册-程序员宅基地

文章浏览阅读1.6w次,点赞33次,收藏226次。PHP7连接数据库的方式:使用mysqli及PDOhttps://blog.csdn.net/zwliang98/article/details/82997349php输出执行sql语句的错误信息:mysqli_query($conn,$sql) or die(mysqli_error( $conn ));问题一:Incorrect integer value: ‘’ for colu..._php连接数据库登录和注册

深度学习之——防止过拟合的方法_加噪声防止过拟合-程序员宅基地

文章浏览阅读3.2k次,点赞8次,收藏13次。1、过拟合定义:在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。模型越复杂,越容易过拟合。因此,原先以最小化损失(经验风险最小化)为目标:现在以最小化损失和模型复杂度(结构风险最小化)为目标:通过降低复杂模型的复杂度来防止过拟合的规则称为正则化。2、..._加噪声防止过拟合

Winform实现在DataGridView控件的单元格中添加多个控件_c# datagridview 添加多控件-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏34次。Winform实现在DataGridView控件的单元格中添加多个控件背景实现思路关键代码背景DataGridView控件的列是支持TextBoxColumn、ComboBoxColumn等类型的,就是DataGridView的单元格进入编辑模式的时候就会出现对应的控件,但是有些业务场景是需要在一个单元格进入编辑状态时需要多个控件组合完成业务需求,就无法直接只用特定类型的Column来实现了。..._c# datagridview 添加多控件

随便推点

CSR8675的DSP学习笔记——离线调试与仿真_csr adk4.2-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏22次。写在最前面:很多读者反馈希望可以有硬件平台配合学习。现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR867x学习板】,进QQ群获取激活码购买学习板享受如下优惠: 1. 价格优惠 2. 免费提供开发教程和项目源码 3. 免费提供入门级技术支持QQ群号:743434463—————————–正文分割线———————————1. 引言CSR8675的DSP..._csr adk4.2

由于高精度事件计时器(HPET)驱动过时导致AMD机器装Win10的卡死蓝屏问题记录_win10关闭高精度事件计时器-程序员宅基地

文章浏览阅读1.5w次。AMD记性频繁卡死,蓝屏,特征在于:打游戏等高负载条件,电脑没有问题;闲置一定时间之后蓝屏或者死机,鼠标键盘无反应,界面全部卡死,只能按开机键重启。未保存的数据全部丢失。近日蓝屏代码 有两类,一,IRQL NOT LESS OR EQUAL 。驱动程序使用了不正确的内存地址造成。第二种是 KMODE_EXCEPTION_NOT_HANDLED。这种主要是由于过时或损坏的设备驱动程序文件。以下..._win10关闭高精度事件计时器

java通过ksoap调用_[Java教程]ksoap2-程序员宅基地

文章浏览阅读242次。[Java教程]ksoap20 2020-06-19 18:04:38 Android连接远程数据库,目前看来最好的解决办法就是webservice,利用webservice进行通讯就要soap协议,目前android没有内建相关的函数,需要借助第三方ksoap2-android进行操作。soap2-android官网地址https://simpligility.githu..._java ksoap2

MySQL中SELECT ... INTO的用法_select id into-程序员宅基地

文章浏览阅读2.7k次。MySQL中SELECT ... INTO的用法官方文档表述:1.SELECT ... INTO var_list selects column values and stores them into variables.2.SELECT ... INTO OUTFILE writes the selected rows to a file. Column and line termi_select id into

重装系统详细指南_电脑重装系统怎么操作csdn-程序员宅基地

文章浏览阅读7.4k次,点赞89次,收藏67次。电脑使用时间久了,无论是正常的系统升级,还是出了故障无法正常使用,都免不了要重装系统,本文详细地给大家介绍下如何重装系统,轻松完成。_电脑重装系统怎么操作csdn

出了国才能知道的十个小秘密_国国际海员-程序员宅基地

文章浏览阅读1.2k次。在国内时,了解“外面的世界”并不难,然而,认识的误区只有在国外住久了,慢慢地体会才能逐渐消除。下面十个方面如果不出国,我是不会知道很清楚的……   一、英语不努力学,是掌握不了的。 出国以前我以为到了国外,有了英语环境,自己会不费力地通过语言关。然而,除了小孩子,成年人欲消除语言障碍谈何容易?难怪许多在国外生活了半辈子的老侨,其英语程度还属初级。   二、从中国出口海外的食品,是给华人吃_国国际海员

推荐文章

热门文章

相关标签