Java try-catch块

news2025/1/13 14:23:57

Java的try块用于封装可能会抛出异常的代码。它必须在方法内部使用。

如果在try块中的特定语句处发生异常,后续的代码块将不会执行。因此,建议不要在try块中放置不会抛出异常的代码。

Java的try块必须后跟catch块或finally块。

Java try-catch语法

try{    //可能引发异常的代码 }catch(Exception_class_Name ref){}

Java try-finally块的语法

try{    //可能引发异常的代码  }finally{}

Java catch块

Java的catch块用于通过在参数中声明异常类型来处理异常。声明的异常类型必须是父类异常(即Exception)或生成的异常类型。然而,良好的做法是声明生成的异常类型。

catch块必须在try块之后使用。可以在单个try块中使用多个catch块。

Java try-catch块的内部工作原理

JVM首先检查异常是否被处理。如果异常未被处理,JVM提供默认的异常处理程序,执行以下任务:

  • 打印异常描述。

  • 打印堆栈跟踪(异常发生的方法层次结构)。

  • 导致程序终止。

但是,如果应用程序程序员处理了异常,将保持应用程序的正常流程,即执行其余的代码。

没有异常处理的问题

让我们尝试理解如果我们不使用try-catch块会出现什么问题。

示例1

TryCatchExample1.java

public class TryCatchExample1 {        public static void main(String[] args) {                    int data=50/0; //可能会抛出异常                     System.out.println("rest of the code");                }        }
 

输出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
 

如上例所示,未执行后续的代码(在这种情况下,未打印后续的代码语句)。

如果异常没有被处理,异常下面的所有代码都不会被执行。

通过异常处理的解决方案

让我们通过Java的try-catch块来解决上述问题。

示例2

TryCatchExample2.java

public class TryCatchExample2 {        public static void main(String[] args) {          try          {          int data=50/0; //可能会抛出异常          }              //处理异常         catch(ArithmeticException e)          {              System.out.println(e);          }          System.out.println("rest of the code");      }        }
 

输出:

java.lang.ArithmeticException: / by zerorest of the code
 

如上例所示,执行了后续的代码,即打印了后续的代码语句。

示例3

在这个示例中,我们还将不会抛出异常的代码放在了try块中

TryCatchExample3.java

public class TryCatchExample3 {        public static void main(String[] args) {          try          {          int data=50/0; //可能会抛出异常                            // 如果发生异常,其余语句将不会执行        System.out.println("rest of the code");          }               // 处理异常         catch(ArithmeticException e)          {              System.out.println(e);          }                }        }
 

输出:

java.lang.ArithmeticException: / by zero
 

在上述示例中,我们可以看到如果在try块中发生异常,后续的代码块将不会执行。

示例4

在这个示例中,我们使用父类异常来处理异常。

TryCatchExample4.java

public class TryCatchExample4 {        public static void main(String[] args) {          try          {          int data=50/0; //可能会抛出异常        }              // 使用异常类处理异常        catch(Exception e)          {              System.out.println(e);          }          System.out.println("rest of the code");      }        }
 

输出:

java.lang.ArithmeticException: / by zerorest of the code
 

示例5

让我们看一个在异常上打印自定义消息的示例。

TryCatchExample5.java

public class TryCatchExample5 {        public static void main(String[] args) {          try          {          int data=50/0; //可能会抛出异常         }               //处理异常          catch(Exception e)          {                    // 显示自定义消息            System.out.println("Can't divided by zero");          }      }        }
 

输出:

Can't divided by zero
 

示例6

让我们看一个在catch块中解决异常的示例。

TryCatchExample6.java

public class TryCatchExample6 {        public static void main(String[] args) {          int i=50;          int j=0;          int data;          try          {          data=i/j; //可能会抛出异常        }              // 处理异常          catch(Exception e)          {               // 解决 catch 块中的异常            System.out.println(i/(j+2));          }      }  }
 

输出:

25
 

示例7

在这个示例中,除了try块,我们还将异常代码放在了catch块中

TryCatchExample7.java

public class TryCatchExample7 {        public static void main(String[] args) {                    try          {          int data1=50/0; //可能会抛出异常           }               //处理异常          catch(Exception e)          {              // 在 catch 块中生成异常        int data2=50/0; //可能会抛出异常        }      System.out.println("rest of the code");      }  }
 

输出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
 

在这里,我们可以看到catch块中没有包含异常代码。因此,在try块中包含异常代码,并且仅在catch块中处理异常。

示例8

在这个示例中,我们使用不同类型的异常类(ArrayIndexOutOfBoundsException)处理生成的异常(Arithmetic Exception)。

TryCatchExample8.java

public class TryCatchExample8 {        public static void main(String[] args) {          try          {          int data=50/0; //可能会抛出异常             }              // 尝试使用 ArrayIndexOutOfBoundsException 处理 ArithmeticException        catch(ArrayIndexOutOfBoundsException e)          {              System.out.println(e);          }          System.out.println("rest of the code");      }        }
 

输出:

 
Exception in thread "main" java.lang.ArithmeticException: / by zero

示例9

让我们看一个处理另一个未检查异常的示例。

TryCatchExample9.java

public class TryCatchExample9 {        public static void main(String[] args) {          try          {          int arr[]= {1,3,5,7};          System.out.println(arr[10]); //可能会抛出异常        }              // 处理数组异常          catch(ArrayIndexOutOfBoundsException e)          {              System.out.println(e);          }          System.out.println("rest of the code");      }        }
 

输出:

java.lang.ArrayIndexOutOfBoundsException: 10rest of the code

示例10

让我们看一个处理已检查异常的示例。

TryCatchExample10.java

import java.io.FileNotFoundException;  import java.io.PrintWriter;    public class TryCatchExample10 {        public static void main(String[] args) {                              PrintWriter pw;          try {              pw = new PrintWriter("jtp.txt"); //可能会抛出异常            pw.println("saved");          }  // 提供已检查的异常处理程序  catch (FileNotFoundException e) {                            System.out.println(e);          }             System.out.println("File saved successfully");      }  }
 

输出:

File saved successfully

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC ResultSet源码解读

通过Debug方式看下源码: 1.Debug程序,找到返回的 ResultSet 的引用 2. 查看ResultSet中的rowData 3. 查看 rows 我们可以看到rows是一个数组,里面存放了我们查询得到的数据(我的表中一共7条数据)。 4. 查看rows中的元…

【总结】网页状态码——200、302、304、400、404、405、500

200正常 500异常–服务器异常Java代码 细节:null和空,null调用方法会出现空指针异常 400异常----传参相关的异常 get方法长度限制 400异常,加了RequestParam(value “name”) 必须传值 400异常,后端类型是Integer&#xff0c…

c# 基于微信wechat_qrcode opencv插件,网络二维码图片批量识别(一)

一、基本概念 微信开源了其二维码的解码功能,并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中。从 OpenCV 4.5.2 版本开始,就可以直接使用。 该项目 github 地址: https://github.com/opencv/opencv_contr…

中国电子学会2023年05月份青少年软件编程C++等级考试试卷二级真题(含答案)

一、编程题(共5题,共100分) 1. 数字放大 给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。 时间限制:1000 内存限制:65536 【输入】 包含三行: 第一行为N,表示整数序列的长度(N ≤ 100)&a…

yandex地图js学习

由于百度地图在国外的某些寻路的场景不太完善,所以试用了一下俄罗斯的开源地图。同google地图一样,规划路线需要申请apikey,但无需绑定信用卡,每天的免费调用次数也非常够用。 yandex maps开发文档 申请apikey 只需要创建账号&…

5.5.4 从IPv4到IPv6过渡——双协议栈

5.5.4 从IPv4到IPv6过渡——双协议栈 与软件版本更新不同,IP协议版本的更新不可能在短时间内完成,只能够采用逐步演进的方法,也就是说在很长一段时间内,必须允许两种协议的网络并存,并且能够确保网络能够互联互通&…

C++11语法杂记(更新中)

文章目录 一. delctype二. default三. delete四. 可变参数模板五. emplace系列六. noexcept七. constexpr 一. delctype delctype和auto类似,也可以自动识别类型 举例如下: 与auto不同的是,auto只能用于定义变量类型,而decltyp…

查看ResultSet中的rowData

之前的dml语句都返回值都是int表示有改动的行数 那么Select可是要展示数据的 SELECT查询的结果 通过这个ResultSet遍历 然后通过next方法来一行行读取数据 类似于迭代器(肯定不是迭代器) 里面还包含获得的数据元素 相当于这个既包含元素,还能迭代自己的元素 具体你…

MySQL——DQL,DCL语言学习

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本章将会讲解MySQLDQL,DCL语言的学习。 一.DQL DQL 英文全称是 Data …

全志V3S嵌入式驱动开发(五种镜像烧入的方法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 关于v3s的镜像烧入,大约有五种方法。前面陆陆续续已经介绍了三种方法,实际工作中具体使用哪一种,大家可以根据自…

SpringBoot 监控与管理的主要组件

SpringBoot 监控与管理的主要组件 SpringBoot作为一款开箱即用的Java Web开发框架,集成了很多方便开发者使用的组件。其中一个非常重要的组件就是监控与管理组件。在现代的分布式应用中,监控与管理已经成为了必不可少的一部分。SpringBoot提供了一些非常…

指针与数组--动态数组(1)[1、C程序的内存映像 2、动态内存分配]

目录 一、C程序的内存映像 二、动态内存分配 1、malloc()函数 2、calloc()函数 3、free()函数 4、realloc()函数 一、C程序的内存映像 一个编译后的C程序 获得并使用4块在逻辑上不…

vue+leaflet 使用js自定义封装动画marker样式点

效果图 1. 引入leaflet import L from leaflet2. 使用原生js实现 import L from leaflet; import ../assets/css/blinkmarker.css; L.blinkMarker (point, property) > {// 使用js标签,便于操作,这个temDivEle的作用是将divEle通过innerHTML的方式获取为字符串var temp…

Nacos 打通 CMDB 实现就近访问

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面…

小程序 体验版 快速配置https服务接口 - 项目是nodeJS配置本地https服务,不用下载源码不用付费,直接使用Git的openssh功能(亲测有效)

背景 学习网易云音乐小程序开发,用了老师的node JS做后端服务器,上线小程序体验版必须要https接口。 接下来就是配置NodeJs服务https踩的坑跟发现的惊喜。 配置https 下载与配置 密钥生成 1 运行命令 : openssl genrsa -out privatekey.p…

BST有缺陷--红黑树(RBT)应运而生

1.首先介绍一下什么是BST(二叉查找树) 若其左子树非空,则左子树上所有节点的值都小于根节点的值若其右子树非空,则右子树上所有节点的值都大于根节点的值其左右子树都是一棵二叉查找树二叉排序树通过中序遍历可以得到递增序列 如下…

技能树-网络爬虫-selenium

文章目录 前言一、selenium二、selenium 测试用例总结 前言 大家好,我是空空star,本篇给大家分享一下《技能树-网络爬虫-selenium》。 一、selenium Selenium是web自动化测试工具集,爬虫可以利用其实现对页面动态资源的采集,对于…

一位老程序员的忠告:别想着靠技术生存一辈子

注:本文系转载。 笔者目前是自己单干,但此前有多年在从事软件开发工作,回头想想自己,特别想对那些初学JAVA/DOT、NET技术的朋友说点心里话,希望我们的体会多少能给你们一些启发。 一、 在一个地方工作8小时就是“穷”…

Python多线程与多进程教程:全面解析、代码案例与优化技巧

文章目录 引言多线程多线程概述案例1:使用多线程实现并发下载文件案例2:使用多线程处理CPU密集型任务 使用threading模块案例1:自定义线程类并启动线程案例2:使用锁保护共享资源 线程同步与互斥案例:使用锁实现线程安全…

css用法总结

1. 块级元素合并时边框重叠问题的解决方案 设置边框2px 红色 如果不做处理,仅仅添加边框则会是这个样子 设置处理后的样式 代码展示 2. 拥有边框的div , hover时的展示效果 代码展示 3. img 和 文字环绕展示 代码展示 设置左浮动即可 4. text-align: center; 可…