java异常机制详解

Python全栈(一)基础之15.异常处理 异常是Python中一个很重要的机制,用于处理程序运行中不可避免的一些错误,处理异常一般使用try_except_else语句。异常在被处理后不会再传播;异常传播时,实际就是异常对象抛给了调用处;Exception可以捕获所有的异常,并且可将异常对象赋值给另一个对象。并且还可以加入finally语句。同时,我们可以自定义异常类型来抛出程序运行时遇到的异常。 阅读详情

概述

java的基本概念是:结构不佳的代码不能运行。
发现错误的理想时机是在编译阶段,也就是在试图运行程序之前。然而编译器并不能找出所有的错误,余下的问题必须在运行期间解决。
异常情形是指阻止当前方法或者作用域继续执行的问题。在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就是告诉你:这里可能会或者已经产生了错误,您的程序出现了不正常的情况,可能会导致程序失败!

那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,也就是说程序已经无法来正确解决问题了,这时它所就会从当前环境中跳出,并抛出异常。抛出异常后,它首先会做几件事。首先,它会使用new创建一个异常对象,然后在产生异常的位置终止程序,并且从当前环境中弹出对异常对象的引用,这时。异常处理机制就会接管程序,并开始寻找一个恰当的地方来继续执行程序,这个恰当的地方就是异常处理程序,它的任务就是将程序从错误状态恢复,以使程序要么换一种方法执行,要么继续执行下去。

总的来说异常处理机制就是当程序发生异常时,它强制终止程序运行,记录异常信息并将这些信息反馈给我们,由我们来确定是否处理异常。
java异常体系的类图为:
这里写图片描述

图片来源:https://blog.youkuaiyun.com/zhangerqing/article/details/8248186

捕获异常

在java里引入了监控区域的概念。它是一段可能产生异常的代码,并且后面跟着处理这些异常的代码。

try块

如果在一个方法内部抛出了异常,或者方法内部调用其他方法抛出了异常,这个方法将在抛出异常的过程中结束,如果不希望方法结束,可以在方法内设置一个特殊的块来捕获异常。这个块就是try块。跟在try关键字后的普通程序块,这个程序块可能产生异常。

try{
	...
}

异常处理程序

当然,try快抛出的异常必须在某处得到处理,这个地方就是异常处理程序。异常处理程序紧跟在try块之后,以关键字catch表示

try{
	//可能抛出异常的代码
}catch(Type1 id1){
	//异常类型Type1的处理
}catch(Type2 id2){
	//异常类型Type2的处理
}

终止与恢复

时间证明:应用更加广泛的异常处理模型是终止模型:即异常发生之后,程序不会回到异常发生的地方继续执行。

捕获所有异常

可以写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类Exception就可以做到这一点。

catch(Exception e){
 ...
}

最好把它放在其他的异常处理程序之后,以防止它抢在其他处理程序之前先把异常捕获了。

另外如果java本身提供的异常类型并不能预见所以的错误,因此不必拘泥于java中已有的异常类型,可以自己定义异常类型来表示程序中可能会遇到的特定问题。
要自己定义异常类,必须从已有的异常类型继承,最好是选择意思相近的异常类继承。

栈轨迹

stacktrace直译过来就是堆栈跟踪的意思。
printStackTrace方法所提供的信息可以通过getStackTrace方法来直接访问,这个方法将返回一个由栈轨迹中的元素构成的数组。其中每一个元素都表示栈中的一帧。数组中的最后一个元素和栈底是调用序列中的第一个方法调用。

public class WhoClalled {
    public static void main(String[] args) {
        f();
        System.out.println("................");
        g();
        System.out.println("................");
        h();
    }

    private static void f() {
        //生成一个异常来获取它的stack trace
        try {
            throw new Exception();
        } catch (Exception e) {
            for (StackTraceElement ste : e.getStackTrace()) {
                System.out.println(ste.getMethodName());
            }
        }
    }

    private static void g() {
        f();
    }

    private static void h() {
        g();
    }
}

上面代码的打印结果为:

f
main
................
f
g
main
................
f
g
h
main

这里只打印了方法名,但是实际上是可以打印整个的StackTraceElement。
问题:如何查看一个方法的调用栈?
答:可以通过异常的getStackTrace方法来获得

try catch finally

化繁为简,不用管太多,记住一句话即可:在实际项目中,finally常常是用来关闭流或者数据库资源的,并不额外做其他操作,它的作用是finally里面的代码总是会得到执行

强化学习新手上路:用PPO-Clip轻松玩转Pendulum-v1(PyTorch保姆级教程) 本文提供了一份基于PyTorch的PPO-Clip算法实战教程,指导强化学习新手在Pendulum-v1环境中构建连续控制智能体。教程详细解析了PPO-Clip的核心机制,特别是其Clip机制如何限制策略更新幅度以确保训练稳定,并涵盖了从环境配置、策略网络设计、经验收集到完整训练框架搭建的全过程,是掌握连续动作空间强化学习的实用指南。 阅读详情

相关推荐

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

Java使用try--catch同时捕获多个异常,一起处理

实际开发中,有一个场景对两种异常做同样的处理,如果分开捕获的话,他们的代码处理逻辑是一样的,显得代码有点冗余,下面方法可以同时捕获多个异常,放在一起做处理: try { //捕获内容 } catch (IllegalArgumentException | BusinessException e) { //处理逻辑 } catch (Exception e) { //其他异常处理逻辑 } ...

张志文的博客 2万+

Open3D 教程学习指南 (持续整理)

Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。

Chase Blog 5930

Java 异常机制详解

在 Java 中可以自定义异常。编写自定义异常类时需要注意以下几点。所有异常都必须是 Throwable 的子类。如果希望自定义一个检查性异常类,则需继承 Exception 类。如果希望自定义一个运行时异常类,则需要继承 RuntimeException 类。可以像下面这样定义自己的异常类:}// ...}如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。

Eqiqi的博客 2520

nnDetection复现Luna16 附模型

淘论文发现nnDetection框架对肺结节的检测效果挺好,便跑了跑复现了下, 作者诚不欺人,确实挺好, 并附上我依据文档训练的模型。

HeavenWalker 2597

故障处理:Oracle一体机磁盘故障时磁盘组重平衡失败的故障处理

摘要: Oracle Exadata一体机出现磁盘故障案例,存储节点故障灯未亮但磁盘已产生大量坏块,导致重平衡失败。文章强调了一体机硬件巡检需检查6个关键维度:节点messages日志、存储cell告警日志、CellCLI日志、ASM告警日志、ILOM日志及服务器信号灯。故障分析显示硬盘物理故障导致磁盘组冗余受损,自动修复流程受阻。文中详细记录了通过CellCLI工具排查损坏磁盘的过程,并提供了完整的故障处理流程和命令输出。文章同步发布于微信公众号"IT民工的龙马人生"和博客网站(www

提供数据库技术支持(系统优化,故障处理,安装升级,数据恢复等) 1231

异常处理

总结:不要依赖异常处理,只有在错误一定会发生,而且无法预知发生条件,导致一定会发生,还不能让该错误影响程序运行 异常:错误发生的信号,程序一旦出错且未处理这个错误,就会抛出异常,且程序终止运行 异常追踪信息:告知哪里出了错误 异常类型:如ValueError,可以自定义 异常值:异常值,告知具体的问题 错误分类: 语法错误,py在执行前,都会对代码语法进行检测,在运行前需要改正 ...

weixin_30699831的博客 132

threejs加载3dtiles(倾斜摄影)数据

1、安装3dTilesRenderer 插件 使用npm 安装 npm install 3d-tiles-renderer --save 或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 2、使用 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRend..

weixin_39481659的博客 1万+

统一异常处理介绍及实战

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:sprinkle_lizwww.jianshu.com/p/3f3d9e8d1efa推荐阅读(点击...

Java知音 1947

GRCNN抓取网络学习2【自制Jacquard数据集训练】

请先完成【机械臂视觉抓取从理论到实战】,这样有利于下面操作的理解!然后第二步是GRCNN抓取网络1【Jacquard数据集等效抓取集制作】,有了自己的数据集输入到GRCNN中是三种文件,接下来就是准备训练GRCNN网络啦!grasps.txtRGB.png本文帮大家根据自制Jacquard数据集训练GRCNN抓取网络,其中包含数据格式的对齐,列举了常见的几种训练方法,相信能坚持到这里的都应该试试顺利了吧!接下来会针对GRCNN调优,期待一下下吧,那就别宁色你的三连。

vor234的博客 2796

Arduino ESP8266自定义配置分区表

ESP8266自定义分区表配置 随着项目的不断开发,项目文件也不断在增大,在没有考虑更换主硬件的条件下,最大开发利用有限资源势在必行,所以今天带来ESP8266自定义分区表的配置。 我这里以版本:2.7.4版本为例,后面的版本也是支持的。 注意:自定义分区表特别要注意和你的硬件相对应,flash芯片的大小决定这个分区是否有效,否则有意想不到的事情发现。 自定义分区表的几个重要参数 /* Flash Split for 4M chips */ /* sketch @0x40200000 (~1019K

perseverance51博客 1725

java的异常处理机制详解

Java异常的处理主要依赖于try,catch,finally,throws,throw这五个关键字。下面分别介绍它们:

jingwen的博客 1万+

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁

HowieXue 薛永浩的博客 2万+

Java 基础 - 异常机制详解

本文综合多篇文章后,总结了Java 异常的相关知识,希望可以提升你对Java中异常的认知效率。

qq_63353796的博客 1178

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java异常机制详解

异常(Exception)的概念 异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。 在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。 所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。 Java是采用面向对象的方式来处理异常的。处理过程: 抛出异常:在...

一介白衣入江南 3652

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java 异常处理机制详解

在 Java 编程中,异常处理是一个至关重要的概念。它帮助我们处理程序执行过程中可能出现的错误或异常情况,从而提高程序的可靠性和稳定性。本文将详细介绍 Java 异常处理机制,包括异常的定义、分类、处理方式以及一些最佳实践。

专注Java和MySQL领域知识分享 1989

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

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

Java异常处理机制你真的会了吗?完全详解来了

一、什么是异常? 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个板块,用户输入不一定符合你的要求;你的程序要打开某个文件,这个文件不存在或者文件格式不对;你要读取数据库的数据,数据可能是空的;程序在运行,内存或硬盘可能满了等等。 二、异常和错误有什么区别? Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。 三、异常有什么用? 可以.

筱寒小记 1293

【Java ——异常机制详解】

super(msg);// ...try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。finally语句块中的代码一定会被执行,常用于回收资源。throws:声明一个异常,告知方法调用者。throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。Java编程思想一书中,对异常的总结。

abclyq的博客 1017

Java 中的异常处理机制详解

异常是程序执行期间发生的问题,它中断了程序的正常流程。异常可以由多种原因引起,比如除数为零、数组越界访问、文件找不到等。在 Java 中,所有异常都是从Throwable类派生出来的。Java 的异常处理机制是一个强大的工具,它可以帮助我们编写更加健壮和可维护的代码。正确理解和运用异常处理,不仅能够提高程序的稳定性,还能简化调试过程。希望这篇文章能够为读者提供有价值的指导,帮助大家在日常开发中有效地管理和应对异常情况。

m0_56896669的博客 1241

6、Java 异常处理机制详解

Java异常ogel异常处理体系摘要 Java异常处理体系包含两大异常类型:检查异常(强制处理)和非检查异常(运行时异常)。通过try-catch-finally结构实现异常捕获和处理,Java 7+引入的try-with-resources语法可自动管理资源关闭。关键点包括:异常分类体系、处理语法结构和最佳实践,如日志记录、异常传递等。合理运用异常处理能提升程序健壮性,避免资源泄漏。

python15397的博客 1042

关于Java异常机制及finally关键字的详解

异常机制(Exception) 软件程序在运行过程中,非常可能遇到刚刚提到的异常问题。这些,例外情况,或者叫异常,怎么让我们写的程序做出合理的处理,而不至于程序崩溃。 常见的异常: 1、用户输入错误 2、设备错误 3、硬件问题,例如打印机关掉、服务器问题 4、物理限制:磁盘满了 Java是采用面向对象的方式来处理异常的。 处理过程: 抛出异常:在执行一个方法是,如果发生异常,则这个方法生成代表该异...

weixin_45797022的博客 1175

Java中的异常处理机制详解

Java允许我们创建自定义的异常类。这通常通过继承自Exception类或其子类(如RuntimeException)来实现。自定义异常允许我们定义特定于应用程序的错误条件,并提供更详细的错误消息和处理逻辑。

wudixiuluo的博客 865
上一篇: [java] Runtime类解析
下一篇: [java] 数组
topEngineerr
博客等级 码龄11年 627粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值