java的异常处理机制(try…catch…finally)

Java 异常处理机制及 try-catch-finally-return 执行顺序 Java 是一种强类型语言,它提供了异常处理机制来处理运行时错误和异常情况。异常处理是编写可靠和健壮的代码的重要组成部分。本文将详细介绍 Java 异常处理机制,并讨论 try-catch-finally-return 语句的执行顺序。 阅读详情

 2.1 相关概念
例外是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的鲁棒性,程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。C语言中,通过使用if语句来判断是否出现了例外,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的例外事件并进行处理。全程变量ErroNo常常用来反映一个异常事件的类型。但是,这种错误处理机制会导致不少问题。
Java通过面向对象的方法来处理例外。在一个方法的运行过程中,如果发生了例外,则这个方法生成代表该例外的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一例外。我们把生成例外对象并把它提交给运行时系统的过程称为抛弃(throw)一个例外。运行时系统在方法的调用栈中查找,从生成例外的方法开始进行回朔,直到找到包含相应例外处理的方法为止,这一个过程称为捕获(catch)一个例外。

2.3  异常处理关键字
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个关键字是这样解释的:
Throws:  Lists the exceptions a method could throw.
Throw:   Transfers control of the method to the exception handler.
Try:    Opening exception-handling statement.
Catch:  Captures the exception.
Finally: Runs its code before terminating the program.
2.3.1 try语句 
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。
2.3.2 catch语句 
catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。
也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。 
2.3.3 finally语句 
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。
2.3.4 throws语句 
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。
2.3.5 throw语句 
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

3.5 如何抛出异常
如果你知道你写的某个函数有可能抛出异常,而你又不想在这个函数中对异常进行处理,只是想把它抛出去让调用这个函数的上级调用函数进行处理,那么有两种方式可供选择:
第一种方式:直接在函数头中throws SomeException,函数体中不需要try/catch。比如将最开始的例子中的testEx2改为下面的方式,那么testEx1就能捕捉到testEx2抛出的异常了。
    boolean testEx2() throws Exception{
        boolean ret = true;
        int b=12;
        int c;
        for (int i=2;i>=-2;i--){
            c=b/i;
            System.out.println("i="+i);
        }
        return true;    
}
第二种方式:使用try/catch,在catch中进行一定的处理之后(如果有必要的话)抛出某种异常。例如上面的testEx2改为下面的方式,testEx1也能捕获到它抛出的异常:
    boolean testEx2() throws Exception{
        boolean ret = true;
        try{
            int b=12;
            int c;
            for (int i=2;i>=-2;i--){
                c=b/i;
                System.out.println("i="+i);
            }
            return true;
        }catch (Exception e){
            System.out.println("testEx2, catch exception");
            Throw e;
        }
    }
第三种方法:使用try/catch/finally,在catch中进行一定的处理之后(如果有必要的话)抛出某种异常。例如上面的testEx2改为下面的方式,testEx1也能捕获到它抛出的异常:
    boolean testEx2() throws Exception{
        boolean ret = true;
        try{
            int b=12;
            int c;
            for (int i=2;i>=-2;i--){
                c=b/i;
                System.out.println("i="+i);
                throw new Exception("aaa");
            }
            return true;
        }catch (java.lang.ArithmeticException e){
            System.out.println("testEx2, catch exception");
            ret = false;
            throw new Exception("aaa");
        }finally{
            System.out.println("testEx2, finally; return value="+ret);
        }
    }

 

5 关于我们的编程的一点建议
弄清楚try-catch-finally的执行情况后我们才能正确使用它。
如果我们使用的是try-catch-finally语句块,而我们又需要保证有异常时能够抛出异常,那么在finally语句中就不要使用return语句了(finally语句块的最重要的作用应该是释放申请的资源),因为finally中的return语句会导致我们的throw e被抛弃,在这个try-catch-finally的外面将只能看到finally中的返回值(除非在finally中抛出异常)。

Java异常处理机制:try-catch-finally的深入探讨 本文深入探讨了Java异常处理机制中的try-catch-finally结构,包括其语法、执行路径及实际应用。通过具体的代码示例和图示,解释了finally子句如何确保无论是否发生异常,都能执行必要的清理工作,以及try-finally结构在异常未被捕获时如何处理。文章还分析了throw语句的使用方法,展示了如何通过抛出异常来处理运行时的错误,并介绍了异常对象的创建和错误消息的生成。 阅读详情

相关推荐

掌握Java异常处理机制:try、catch与finally的深入解析

本文深入探讨了Java异常处理中的核心机制,包括try-catch块的使用、异常的传播、finally块的必要性以及自定义异常的定义。通过对OCP考试内容的回顾,本文将帮助读者理解异常处理的复杂性,并掌握在实际编程中如何有效地管理和处理异常。

weixin_36212459的博客 494

java try catch陷阱_Java异常处理最佳实践及陷阱防范

出自《深夜里的程序猿》作者:wangzenghuang前言不管在我们的工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会在某个时间点出现,如果处理不当或是不及时,往往还会导致其他新的问题出现。所以我们要时刻注意这些陷阱以及需要一套“最佳实践”来建立起一个完善的异常处理机制。正文异常分类首先,这里我画了一个异常分类的结构图。在JDK中,Throwa...

weixin_33921444的博客 280

运放专题:运算放大电路中的相位补偿

的方法

五花带点肉 2万+

Java异常处理机制 try-catch-finally

Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享。一、在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有错,并且提供修改方法。很多情况下,当我们调用某个方法时,会提示我们某条语句应该用 try-catch语句来包起来。 但是一直没有去理解这是为什么!!! 举例说明如下:ExceptionDe...

weixin_33851604的博客 1124

用Python实现古诗词填字游戏(三)

古诗词做填字游戏的第三部分代码,也是最核心的部分。实现对诗文和关键字的选定,并确定文字的输出位置。

PosPro的专栏 6117

海外跨境电商商城源码-进出口电商平台网站-多语言多商户平台

我们的海外跨境电商系统源码还包括各种功能模块,如用户管理、商品管理、订单管理等。支付管理:与主流支付平台(如Stripe、PayPal等)的集成,支持多种支付方式;订单管理:创建订单、支付订单、取消订单等操作,以及订单状态查询和历史记录;购物车管理:添加商品到购物车、查看购物车、修改购物车中的商品数量等操作;商品管理:商品信息录入、编辑、删除等操作,以及商品分类和搜索功能。客服管理:在线咨询、投诉处理等功能,提供更好的用户服务。用户管理:注册、登录、忘记密码、个人资料。# 检查电子邮件地址是否有效。

柏诣科技的博客 2661

java:异常处理机制 try-catch-throw-finally

try:try{ int i = 1/0; }catch(Exception e){ ........ } 一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让程序运行下去,并且输出为什么出错!

u014644140的专栏 906

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 205

Java异常处理 try,catch

什么是异常: 不正常。意外。例外。 当程序正常情况下是可以正确的运行的,但是某些情况下,会出现“意外”,导致程序无法正常运行,“崩溃了”,这些“意外”的情况就是异常。 这些意外,不是程序本身的问题,是用户的输入、硬件的问题(例如:复制文件,硬盘已满)、网络中断等等。 如果一旦发生意外,程序就挂了,用户体验非常不好,我们增强我们程序的健壮性,稳定性,我们就需要“尽力避免”,避免不了的,“尽...

# Never Give up & 804

win2016 php mysql_Windows Server 2016 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程 | 系统运维...

准备篇一、环境说明:操作系统:Windows Server 2016PHP版本:php 7.1.0MySQL版本:MySQL 5.7.17.0二、相关软件下载:1、PHP下载地址:2、MySQL下载地址:3、Microsoft Visual C++ 2010 可再发行组件包(安装MySQL需要此插件)4、Visual C++ Redistributable for Visual Studio 20...

weixin_34794420的博客 1377

Maya ACES工作流程配置(Arnold 及 RedShift 贴图配置规范-还原出SP-Aces流程下贴图正确的效果) PS还原Aces流程下渲染的图

*如果使用SP,项目工程如果新建的时候设置的就是Aces的流程的话,按规范正常导出即可,贴图会带上相对应的后缀,然后贴图导入材质球的时候会根据后缀自动设置相对应的色彩空间;**万一不是,就自己手动设置一下对应的色彩空间即可;然后点击选择当前的或者选择全部导入的贴图,点击右下角后,开始转换;我复制了一下,一个默认没有LUT的效果,然后另外一个是加载2个LUT后的还原效果,和渲染的效果应该是没有区别的,至少我没有看出明显的区别;把需要转换的贴图拖拽到左侧,然后右面选择需要转换到的相对应的色彩空间;...

Yuulily 7994

学习Java异常——让你的程序不再脆弱

关于java中异常的一些基本知识

Smarmot的博客 246

Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?

编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个!

DSK_981029的博客 2573

【JAVA-Day68】异常处理的奥秘:深度解析 Java try-catch-finally 机制,高效应对异常问题

在软件开发中,异常处理是保障程序稳定性的重要一环。本文将深入研究 Java 中的 try-catch-finally 机制,通过对每个环节的详细解析和实际案例演示,帮助读者更好地理解和应用异常处理的核心知识点。在某些情况下,我们可能需要抛出自定义异常来更好地表示特定的错误情况,以便于后续的处理。// 自定义异常的实现try {// 可能抛出异常的代码块if (/*某个条件*/) {throw new CustomException("发生自定义异常");// 处理自定义异常。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2万+

Redhawk: dynamic ir drop分析(Clock Buffer Clustering)

在dynamic分析中,ir drop问题多出现在三种情况下,缺power mesh,缺power switch,clock cell过于密集。 前两种情况通过选中具体instance查看min res path都比较容易分析出来,而且大部分问题都出现在channel里,这里不多做赘述。 clock cell过于密集这是观察结果,缺少报告支持,这里分享一下分析方法。 首先,选中压降超过signoff标准的instance,(Results->List of Worst Instance DVD中

m0_61544122的博客 5274

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JAVA异常处理机制的个人理解(try catch throw finally)

搜到了这篇文章 ,下面说下我自己的问题与理解。 我看完程序给出的输出是: i=2 i=1 testEx2, catch exception testEx2, finally; return value=false testEx1, at the end of try testEx, finally; return value=false 但(= =)答案是:

花凌的博客 1794

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java中的异常处理机制是怎样的?try-catch-finally是如何工作的?

在 Java 中,异常(Exception)是指在程序运行过程中发生的、阻碍程序正常执行的事件。这些事件可能是由程序中的错误引起的,也可能是由外部因素(如用户输入错误、网络故障等)引起的。块,那么该异常将被传递给调用者(即,当前方法的调用者)。Java 的异常处理机制是一种强大的工具,它允许程序员以结构化和可控的方式处理程序中的错误和异常情况。结构,我们可以确保程序在遇到异常时不会崩溃,并且能够以一种优雅的方式处理异常。语句执行时,它会立即终止当前方法的执行,并将异常对象传递给调用者。

Good_tea_h的博客 931

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java 异常处理机制,throws与throw,try-catch-finally

java 异常处理机制1.Java异常处理2.try-catch-finally的程序流程图3.demo4.不捕获异常时的情况 在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据而是字符等。过多的分支会导致程序的代码加长,可读性差。因此采用异常机制。 1.Java异常处理 Java采用异常处理机制,将异常处理的程序代码集中在一起...

码农回顾 646

【JAVA】异常处理机制:try - catch - finally底层原理(20)

在 Java 中,异常是指程序在运行过程中出现的不正常情况。异常处理机制允许程序在出现异常时进行捕获和处理,从而避免程序崩溃。Java 中的异常分为两类:受检查异常(Checked Exception)和非受检查异常(Unchecked Exception)。受检查异常必须在方法签名中声明或者进行捕获处理,而非受检查异常则不需要。解答思路:可以通过继承Exception类(受检查异常)或类(非受检查异常)来自定义异常类。然后在需要抛出异常的地方使用throw关键字抛出该异常对象。

Vinfol的博客 1313

java处理异常一定有finally_Java 异常处理 之 异常处理机制一:try-catch-finally

一、Java 异常处理编写程序时,要在出现可能出现错误的时候加上检测的代码,如判断分母为0,数据为空,过多的 if-else分支导致程序代码加长,臃肿,可读性差,因此采用异常处理机制。Java采用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁、优雅, 并易于维护。二、异常处理:抓抛模型1、抛出Java 程序的执行过程中出现异常,会生成一个异常类对象,该异常对象...

weixin_29848477的博客 1240

Java中的异常处理机制是什么?如何使用try-catch-finally语句?

Java还提供了其他的异常处理机制,例如throws语句和throw语句,用于在不同的方法之间传递异常和处理异常。在上面的示例中,我们尝试执行一段可能抛出异常的代码(`calculate(5)`),并将其结果输出。在这个例子中,Rectangle类继承了Shape类,并提供了area()和perimeter()方法的实现。抽象方法是一种方法声明,它不需要任何实现,只有方法签名,没有方法的主体。使用工厂模式,我们可以创建一个工厂类`CarFactory`,它负责创建正确的`Car`实例。

m0_58956056的博客 942

Java异常处理机制以及try-catch-finally-return执行顺序

一、异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”,异常是一种对程序运行过程中发生错误时进行通知的机制。如:网络连接失败、用户输入错误或打开文件失败等。异常以对象的形式出现,不同的异常对象中封装了相应的错误信息   二、JAVA异常类:   Java语言提供了两大类异常: 编译时异常(受检异常) 运行时异常(非受检异常) 编译时异常:指程序中必须接受检查和处理的异常,由E

淡淡的倔强的博客 2103

Java 中的异常处理机制是如何工作的?请解释 try-catch-finally语句块的作用 ?

对于特定的业务逻辑,可以定义自定义异常,使异常处理更加清晰和有针对性。

程序员学习园地。 1167
上一篇: 为什么很多人都喜欢new一个类,而不是直接声明一个对象呢?
下一篇: C++处理异常 try,catch,throw
codestinity
博客等级 码龄16年 29粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值