Java try-catch块

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.mfbz.cn/a/31395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中,车辆轨迹图是一个广泛应用的技术,它可以被用于道路交通管理,行车安全评估等领域。Python是一种强大的编程语言,它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…

Git的使用方法

文章目录 Git简介Git用法上传到gitee上 Git简介 简单来说,Git就像一个日志一样,可以帮你记录你对文本文件的修改,但他的功能又强于日志,不仅可以记录,还可以帮你存储那些你对文本文件的修改,当你想要找回之…

ArcGis系列-坐标系转换

Arcgis的工程项目可以添加各种类型的空间资源,比如数据库空间表、shp文件,每张空间表的坐标系可能都会有差异,把他们放到一个工程里时可以统一设置坐标系。 本文将介绍ArcGis三个需要坐标转换的场景: Arcgis Pro设置项目坐标GP分…

论文笔记--GPT-4 Technical Report

论文笔记--GPT-4 Technical Report 1. 报告简介2. 报告概括3 报告重点内容3.1 Predictable Scaling3.2 Capabilities3.3 limitations3.3 Risks & mitigations 4. 报告总结5. 报告传送门6. References 1. 报告简介 标题:GPT-4 Technical Report作者:…

【ABAP】数据类型(四)「类型组TYPE-POOL」

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较…

Mac安装chromedriver

一、chromedriver下载 1、打开chrome浏览器输入:chrome://settings/help 查看当前chrome版本     2、下载对应的chromedriver版本 下载地址:http://chromedriver.storage.googleapis.com/index.html 选择mac系统的chromedriver 直接解压该文件 3、…

SpringBoot使用MockMVC单元测试Controller

前言: 在SpringBoot应用程序中,Controller是接受客户端请求并返回响应数据的核心组件。为了保证Controller的正确性和稳定性,我们可以使用MockMVC框架进行单元测试。MockMVC是Spring框架提供的一个HTTP客户端,用于模拟HTTP请求和响…

华为云“企业快成长大数据与微服务技术创新论坛”成功举办

6月16日,由华为云、msup、厦门火炬大学堂、厦门市行业软件协会联合主办的“企业快成长大数据与微服务技术创新论坛”在厦门成功举办。本次活动汇聚了华为云、珍爱网等知名企业的CTO和技术专家,通过技术案例解析了大数据平台构建、微服务演进等内容&#…

Golang笔记:使用json包处理JSON数据

文章目录 目的Decoding(解析数据)Encoding(创建数据)总结 目的 JSON 是一种非常流行的数据交换格式,是JavaScript中原生支持的一种数据,因为其简单方便,所以也经常用在不同程序、不同语言间数据…

【FPGA入门】第七篇、FPGA实现VGA接口驱动

目录 第一部分、实验结果 1、横的三色彩条效果 2、竖的三色彩条效果 第二部分、VGA驱动基本知识 1、VGA分辨率问题 2、VGA驱动波形 2.1、工业标准的时序波形图 2.2、比上面那张图更容易理解的图 2.3、每个区域对应的时间 2.4、不同分辨率的表格 3、VGA扫描范…

【Vue全家桶高仿小米商城】——(四)项目基础架构

第四章:项目基础架构 此章节全力讲解前端基本项目架构,通过此章节可搭建一个通用性的前端架构,内容涵盖跨域方案、路由封装、错误拦截等。 文章目录 第四章:项目基础架构一、前端跨域解决什么是前端跨域?怎么解决前端…

项目调研丨多区块并行处理公链 Transformers 研究报告

目录 一、项目简介 二、项目愿景 三、特色和优势 (1)速度 (2)安全 (3)可扩展性 (4)高度定制 (5)不可篡改 (6)所有数据公开透…

自然语言处理从入门到应用——动态词向量预训练:双向语言模型

分类目录:《自然语言处理从入门到应用》总目录 对于给定的一段输入文本 w 1 w 2 ⋯ w n w_1w_2\cdots w_n w1​w2​⋯wn​,双向语言模型从前向(从左到右)和后向(从右到左)两个方向同时建立语言模型。这样做…

论文阅读 - SegFormer

文章目录 1 概述2 模型说明2.1 总体结构2.2 Hierarchical Transformer Encoder2.3 Lightweight All-MLP Decoder 3 SegFormer和SETR的比较参考资料 1 概述 图像分割任务和图像分类任务是非常相关的,前者是像素级别的分类,后者是图像级别的分类。基于分类…

ARM、ARM架构、ARM架构芯片

ARM是一种基于精简指令集(RISC)的处理器架构,它由英国的ARM公司设计和授权。 ARM芯片具有低功耗、高性能、高集成度等特点,广泛应用于嵌入式系统、移动设备、物联网、服务器等领域。本文将介绍ARM的各类芯片,包括其特…

卷积神经网络中池化层的详细介绍

卷积神经网络自2012年,到2023年经历了翻天覆地的变化。最早的卷积神经网络由卷积层、池化层和全连接层所构成。其中卷积层用于提取图像的特征,池化层削减特征数量,全连接层用于对特征进行非线性组合并预测类别。然而在transformer横行的年代&…

基于卡尔曼滤波进行四旋翼动力学建模(SimulinkMatlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

笔记本电脑介绍:记录生活,激发灵感

笔记本电脑是一种轻便、便携的电脑,它的出现改变了人们的工作和生活方式,它的优势在于它的小巧、轻便、便携性,可以满足用户的不同需求。本文将从笔记本电脑的结构、功能、优势和应用四个方面进行详细阐述。 一、笔记本电脑的结构 笔记本电…

十八、网络基础(一)

文章目录 一、协议(一)前置(二)协议分层1.软件分层2.协议分层3.OSI七层模型4.TCP/IP五层(或四层)模型(1)物理层:(2)数据链路层:(3)数据链路层:(4&…

Golang每日一练(leetDay0104) 最小高度树、戳气球

目录 310. 最小高度树 Minimum Height Trees 🌟🌟 312. 戳气球 Burst Balloons 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一…