try、catch、throw、throws、finally详解

【Java基础】异常概述、try-catch、throws方式处理异常及自定义异常 【Java基础】异常概述、try-catch、throws方式处理异常及自定义异常简单示例 阅读详情

一.关键字:throw,throws,try和catch的用法如下:

1、throws出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型

2、throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw,告知用户。

3、try出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。

4、catch出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。

二.为什么要使用 finally

1.假设 count 为需要使用的资源并且使用完之后需要释放资源,那么 我们可以吧释放资源的语句放到 try-catch后执行,当前程序不管执不执行try-catch语句,都会执行释放资源的语句

//初始化资源
int count = 0 ;

try{


count ++ ;

if(count==1)throw new Exception ("Exception in try");


}catch(Exception e){


System.out.println("catch block");

}

//释放资源

count = 0;

2.但是当 try 或catch 中有多条 return 语句,那么每次 return 之前,都需要执行释放资源的语句

public void f() throws Exception {

int count = 0;  //初始化资源

try{

   doSomething;

   statementMayCauseException;  //可能会抛出异常的语句,若异常没有被catch,则直接抛出,也不会执行到try-catch下面的语句

   doSomething;

   if(count == 1) throw new Exception1("E1 in try");

    if(count == 2) throw new Exception2("E2 in try");

}catch(Exception1 e){

   

count = 0; //释放资源

    throw e;  //再次把异常抛出,让上一级捕获。此时将不会执行catch外的语句,所以要先释放资源



}catch(Exception2 e){



count = 0; //释放资源

return; //返回了,也不会执行catch外的语句,所以要先释放资源

}

count = 0; //释放资源

}

3.这样,就需要在每一个可能返回的地方,以及每一个可能出现异常而导致程序跳转的地方,考虑如何释放资源,导致复杂和冗余。

所以,需要finally语句。

把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。

int count = 0;

try{

count++;

if(count == 1)throw new Exception();

}catch(Exception e){

}finally{

count = 0;

}

4.finally什么时候执行

finally在return语句之后,跳转到上一级程序之前执行。

public class Test { 

public static void main(String[] args) {  

System.out .println(test ());  

}   

public static String test() {  

try {  

System.out .println("try block");  

return test1 ();  

} finally {  

System.out .println("finally block");

 //return "finally";   若打开,则替换"after return" 

}  

}  

public static String test1() {  

System.out .println("return statement");  

 return "after return";  

}  

}

结果:

try block

return statement

finally block

after return

分析:

1.try语句块,return test1(),则调用test1方法

2.test1()执行后返回"after return",返回值"after return"保存在一个临时区域里

3.执行finally语句块。若finally语句有返回值,则此返回值将替换掉临时区域的返回值

4.将临时区域的返回值送到上一级方法中。

如果若finally语句有返回值,则此返回值将替换掉临时区域的返回值

 

5.验证finally真正执行顺序

package test;

import java.io.*;

public class Test1{

public static void main(String argv[]){

     Test1 m=new Test1();

     System.out.println(m.amethod());

 }

public int amethod(){

       try{

            FileInputStream dis =new FileInputStream("Hello.txt"); //1,抛出异常

        }catch ( Exception ex) {

               System.out.println("No such file found");   //2.catch捕获异常,并执行

               return -1;                                  //4,return 返回

        }finally{

               System.out.println("Doing finally");  //3.finally一定会执行,在return之前。(准确说,应该是return ;语句)

       }

         return 0;

    }

  }

    输出结果为:

    No such file found

    Doing finally

    -1

总结:finally其实是仅在return ; 语句执行前执行,如果return 一个函数,那么会先执行函数,但如果函数内有(return ;)语句,那么finally就会在这个(return ;)语句前执行。

ps:如果catch块有异常向外抛出,执行顺序呢:我执行说,你抛你得异常,我finally我的语句,我俩互不干涉,你别管我啥时执行,但我一定会执行。

关于finally,此时,应该很明朗了  您只需记着一点:除非调用system.exit()让程序退出或断电等因素致使程序中止,否则,无论任何因素,finally块都一定会执行!!

 

【Java】异常 try-catch throw 详解 阅读详情

相关推荐

Java中的异常处理详解(try、catch、finally、throw、throws)

Java中的异常处理详解(try、catch、finally、throw、throws)

Trouvailless的博客 3722

Controller 层返回值的公共包装类-避免每次都包装一次返回-InitializingBean增强

场景:在微服务中,一般返回数据都会有个返回码、返回信息和返回消息体,但是每次返回时候调用或者是封装,太过麻烦,有没有什么办法不用每次都封装呢? 答案是有的。 返回值对象 package com.study.auth.comm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.Serialize..

hu10131013的博客 10万+

处理异常不再困难-try-catch-finally和throw语句详解

在软件开发过程中,代码经常会出现各种问题,例如空指针、数组越界等等。在这些情况下,如果不进行处理,程序就会崩溃,严重影响用户体验。而处理这些异常是开发者必须要掌握的技能之一。Java中提供了try-catch-finally和throw语句来处理异常。本文将详细介绍这些语句的使用方法,并通过实际案例演示其应用场景及优缺点分析。本文主要涉及以下几个方面:try-catch-finally和throw语句的基本语法和使用方法。源代码解析,通过实例演示其应用场景。

喵手的博客 1593

C++异常(try、throw、catch) 快速掌握

一文快速掌握C++异常机制(try throw catch noexcept)

qq_33269219的博客 1677

简易背单词系统C/C++

#include<stdio.h> #include<string.h> int F=20,N=100,k=0; int score[100]; int count=0; void hello(); void add(); void preview(); void mdelete(); void etc(); void cte(); void mscore(); void...

青木年华 9154

Dify 进阶指南 | 5步打造智能JSON转换器(Excel数据预处理神器)

本文详细介绍了如何利用Dify平台的Chatflow功能,通过5个步骤构建一个智能JSON转换器,专门用于Excel数据预处理。该工具能够根据用户指令自动解析Excel表格,执行数据清洗、聚合计算,并精准输出定制化的JSON格式,极大提升前端开发、数据分析与测试工作的效率。

weixin_28520495的博客 575

java 异常体系(超全超详细)try, catch,finally,throw,throws详解

异常概念 异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。 异常分类 异常的处理 异常处理的五个关键字: try, catch,finally,throw,throws; ...

qq_39654399的博客 842

RV1126平台JD9366触摸屏驱动移植实战:从源码到烧录的完整指南

本文详细介绍了在RV1126平台上移植JD9366触摸屏驱动的完整流程,从环境准备、源码获取到驱动配置、内核编译、设备树设置以及固件烧录与测试验证。通过实战经验分享和常见问题排查,帮助开发者高效完成触摸屏驱动移植,适用于嵌入式Linux开发场景。

weixin_30872337的博客 408

详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)

异常的概念,异常的体系结构,异常的处理思路LBYL和EAFP,异常的抛出,异常的处理,throw,throws,try-catch,finally,自定义异常类

luming的博客 6602

【backtrader保姆级教学】投资组合回测

method1:探索投资组合的最有方案,使用蒙特卡洛模拟Markowitz模型。# 提取最小波动组合对应的权重, 并转换成Numpy数组。# 绘制收益-标准差的散点图,并用颜色描绘夏普比率。# 在收益-风险散点图中突出风险最小的点。:param any_day: 任意日期。# 将该点坐标显示在图中并保留四位小数。password = “替换密码”# 找到标准差最小数据的索引值。user = “替换账号”# 计算GMV投资组合收益。# 计算每项资产的夏普比率。# 设置无风险回报率为0。

weixin_38132951的博客 2315

FPGA实战:手把手教你实现VESA DSC编码(附Verilog代码解析)

本文详细介绍了如何使用FPGA实现VESA DSC编码器,包括核心架构设计、Verilog代码实现与优化技巧。通过流水线设计、色彩空间转换和预测编码等关键技术,帮助开发者掌握工业级DSC编码器的开发流程,并提供实用的调试与性能优化方法。

weixin_29165725的博客 403

【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!

文章目录1、异常1.1 异常概念1.2 异常体系1.3 异常分类1.4 异常的产生过程解析2、 异常的处理2.1 抛出异常throw2.2 Objects非空判断2.3 声明异常throws2.4 捕获异常try…catch2.4 finally 代码块2.5 异常注意事项3、自定义异常3.1 概述3.2 自定义异常练习 1、异常 1.1 异常概念 异常 :指的是程序在执行过程中...

宜春 1万+

台达PLC使用RS485Modbus指令通信

台达PLC,RS485,Modbus RTU,从站梯形图,0X01,0X02,0X05,CRC校验

lilililimu的博客 1万+

第七模块 throws与throw、try-catch-finally哪个部分可以省略、如果在catch中return了finally还会执行吗、常见异常类有哪些

1 throws与throw的区别 2try-catch-finally 中哪个部分可以省略? 3 try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 答:会执行,在 return 前执行。 4常见的异常类有哪些? ...

weixin_41847891的博客 1193

从模拟到实战:移远EC800M单片机MQTT接入OneNet全流程解析

本文详细解析了移远EC800M单片机通过MQTT协议接入OneNet平台的全流程,涵盖环境准备、模拟设备搭建、硬件迁移、数据交互调试及性能优化等关键步骤。针对常见问题如AT指令缓冲区溢出、心跳间隔设置等提供实战解决方案,帮助开发者高效实现物联网设备稳定接入。

weixin_29215815的博客 431

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力 (论文笔记+引入代码)。LSKNet能够动态调整其大的空间接收场,以更好地模拟遥感场景中各种对象的范围上下文。据我们所知,这是首次在遥感目标检测领域探索大型和选择性核机制。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 2864

java try catch_java基础之异常:死了都要try,不淋漓尽致地catch我不痛快!

一只Tom猫:JVM学习总结:内存结构+性能调优+垃圾收集策略与算法+内存分配与回收策略+类加载+垃圾收集器等​zhuanlan.zhihu.com1、异常1.1 异常概念异常 :简单说就是不正常运行,最终导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译...

weixin_39857211的博客 177

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java异常处理:try-catch-finally正确使用姿势

异常处理是Java开发中不可或缺的部分,合理的异常处理能让程序更健壮,避免程序崩溃。Java异常分为编译时异常和运行时异常,编译时异常必须显式处理,运行时异常可选择性处理。核心语法try-catch-finally中,try块包裹可能抛出异常的代码;catch块捕获指定异常并处理,可多个catch捕获不同异常,遵循“子类异常在前,父类异常在后”的原则;此外,throw用于主动抛出异常,throws用于声明方法可能抛出的异常,灵活运用这些语法,能让异常处理更规范、更高效。

mycase4的博客 317

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《Java 100 天进阶之路》第6篇:Java异常有哪几种

Java异常分为检查型异常(必须处理)、运行时异常(代码逻辑错误)和错误(JVM严重问题)。处理异常可使用try-catch捕获或throws声明抛出,finally确保资源释放。常见异常包括NullPointerException、IOException等。最佳实践是检查型异常必须处理,运行时异常应修复代码而非捕获,使用try-with-resources自动管理资源,必要时可自定义异常。避免滥用异常捕获,应优先通过代码逻辑预防异常发生。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 916

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java异常的处理和捕获以及相关概念(异常构架,简介)

Java异常架构与异常关键字 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。 Java异...

YSY02的博客 332

【Java零基础连载09】Java异常处理机制|异常体系、try-catch-finally、throws、自定义异常

上一篇我们彻底收官Java面向对象全套核心体系,搞定多态、抽象类、接口、代码块、final关键字等重难点,完成了Java基础核心的完整闭环。从本篇开始,我们正式进入Java进阶语法阶段,首先攻克项目开发必备的异常处理机制。在日常编码中,空指针、除数为零、数组越界、类型转换错误层出不穷。如果没有异常处理机制,程序一旦报错就会直接终止运行、崩溃退出,用户体验极差,项目稳定性无法保障。捕获错误、处理异常、保证程序正常运行、精准定位报错位置,是所有项目开发、框架底层、线上排错的核心基础。

荏苒夕阳的博客 345

Java基础语法之异常

异常:本身是一个类,产生异常就是创建异常对象并抛出一个异常对象。 异常产生的过程解析: 异常处理的5个关键字:try catch finally throw throws throw关键字: 作用: 可以使用该关键字在指定方法中抛出指定的异常; 使用格式: throw new xxxException(“异常产生的原因”) 注意: 1 throw关键字必须写在方法内部; 2 th...

WAH 229

Java:异常

详细总结一下个人学习java异常的相关知识点 java中具备处理错误的机制,其中针对的对象称为异常——Exception :当出现异常时,如果没有处理措施会出现编译出错,程序中断等问题     首先罗列一些常见的异常:     NullPointerException :空指针异常   &nb...

weixin_41973134的博客 211

java异常处理

一、 Exception类的层次 所有的异常类是从 java.lang.Exception 类继承的子类。 Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。 Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。 Error 用来指示运行时环境发生的错误。 例如,JVM 内...

goforitaaa的博客 161

JAVA-SE-异常

异常的分类,异常的五个关键字 throw, throws, try, catch, finally。及怎样自定义一个异常类

m0_74859835的博客 491
上一篇: Android_7.0 因为file://引起的FileUriExposedException异常
下一篇: Android 微信聊天记录、联系人备份并导出为表格
ParkSiHoo_
博客等级 码龄10年 20粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值