【Java】 异常讲解

Java异常 Throwable、Exception、Error   异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。   Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。 Throwable https://images0.cnblogs.com/blog2015/521294/201505/170149357047799.jpg 在 Java 中,所有的异常都有一个共同的祖先 T... 阅读详情

Java 异常讲解

异常 是一种特殊的机制,可以让我们在程序中处理错误。

什么是异常

在编程世界中,程序执行中的错误和不可预见的情况称为 异常。

在程序中,由于 用户操作无效 、 磁盘空间不足 或 与服务器的网络连接丢失 ,可能会发生异常。异常也可能是由 编程错误 或 不正确使用 API 引起的。与现实世界中的人类不同,程序必须确切地知道如何处理这些情况。为此,Java 有一种称为异常处理的机制。

关于关键字

**Java 中的异常处理基于在程序中使用以下关键字:**在 Java 程序中使用关键字的示例:

  • try - 定义可能发生异常的代码块;
  • catch - 定义处理异常的代码块;
  • finally - 定义一个可选的代码块,如果存在,则执行该代码块,而不管 try 块的结果如何。

这些关键字用于在代码中创建特殊构造:try{}catch try{}catch{}finally try{}finally{}

  • throw - 用于提出异常;
  • throws - 在方法签名中使用,以警告方法可能引发异常。
// 此方法从键盘读取字符串

public String input() throws MyException { // Use throws to warn
	// t该方法可能引发 MyException
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
    // 我们使用 try 块包装可能会创建异常的代码。在这种情况下,
    // 编译器告诉我们
    // BufferedReader 类可能引发 I/O 异常
    try {
        s = reader.readLine();
	// 我们使用 catch 块包装处理 IOException 的代码
    } catch (IOException e) {
        System.out.println(e.getMessage());
	// 我们在 finally 块中关闭读取流
    } finally {
	// 例如,如果流没有打开,那么当我们关闭流时可能会发生异常,因此我们将代码包装在一个 try 块中
        try {
            reader.close();
	// 关闭读取流时处理异常
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    if (s.equals("")) {
    // 当存在空字符串时,将阻止我们的程序正常工作。
    // 例如,我们使用此方法的结果调用子字符串 (1, 2) 方法。因此,我们必须通过使用 throw 来生成我们自己的 MyException 异常类型来中断程序。
        throw new MyException("The string cannot be empty!");
    }
    return s;
}

为什么我们需要异常?

让我们看一个来自现实世界的例子。想象一下,高速公路的一段有一座重量容量有限的小桥。如果一辆比桥梁极限重的汽车驶过它,它可能会倒塌。委婉地说,司机的情况会变得异常。为了避免这种情况,运输部门在出现问题之前在道路上安装警告标志。看到警告标志,驾驶员将他或她的车辆重量与桥梁的最大重量进行比较。如果车辆太重,驾驶员将采取绕行路线。运输部门首先,使卡车司机能够在必要时改变路线,其次,警告司机主要道路上的危险,第三,警告司机在一定条件下不得使用桥梁。防止和解决程序中异常情况的能力,允许它继续运行,是在 Java 中使用异常的一个原因。

异常机制 还允许您通过验证(检查)任何输入来保护 代码(API) 免受不当使用。现在想象一下,你是运输部门。首先,您需要知道驾驶者可以预期遇到麻烦的地方。其次,您需要创建并安装警告标志。最后,如果主要路线出现问题,您需要提供绕行。

在 Java 中, 异常机制 的工作方式与此类似。在开发过程中,我们使用 try 模块围绕危险的代码段构建 “异常屏障” ,我们使用 catch 模块提供 “备份路由” ,并且我们编写代码,无论模块中有什么内容,都应该运行。如果我们不能提供“备份路由”,或者我们想给用户选择的权利,我们至少必须警告他或她危险。

为什么?想象一下,一个司机的愤怒,他没有看到一个警告标志,到达了一座他无法穿过的小桥!

在编程中,在编写类和方法时,我们不能总是预见其他开发人员如何使用它们。因此,我们无法预见 100% 解决特殊情况的正确方法 。也就是说,警告其他人发生特殊情况的可能性是一种很好的形式。而 Java 的 异常机制 允许我们使用 关键字 来做到这一点,其本质上是一个声明,即我们方法的一般行为包括抛出异常。

因此,任何使用该方法的人都知道他或她应该编写代码来处理异常。

公路

try catch {} finally{} throws

警告他人 “麻烦” (throws Exception)

如果您不打算在方法中处理异常,但希望警告其他人可能会发生异常,请使用关键字。方法签名中的此关键字意味着,在某些情况下,方法可能会引发异常。

此警告是方法接口的一部分,允许其用户实现自己的异常处理逻辑。抛出后,我们指定抛出的异常类型。

这些通常是 Java 类的后代。由于 Java 是一种面向对象的语言,因此所有例外都是 Java 中的对象。

告警

异常层次结构

当程序运行时发生错误时,JVM 会从 Java 异常层次结构(一组可能源自共同祖先的异常)类中创建一个适当类型的对象。我们可以将异常运行时情况分为两组:Throwable

  1. 程序无法恢复并继续正常运行的情况。
  2. 可以恢复的情况。

第一组包括涉及从类中继承的异常的情况。这些是由于 JVM 故障、内存溢出 或 系统故障 而发生的错误。它们通常表示软件无法修复的严重问题。

在 Java 中,编译器不会检查此类异常的可能性,因此它们被称为 未经检查的 异常。此组还包括 RuntimeExceptions,它们是从类中降下来的异常,由 JVM 在运行时生成。它们通常是由编程错误引起的。

这些异常也不会在编译时选中(取消选中),因此您无需编写代码来处理它们。

第二组包括编写程序时可以预见的异常情况(因此您应该编写代码来处理它们)。此类异常称为已检查异常。当涉及到异常时,Java 开发人员的大部分工作都是处理这种情况。Error Exception

创建例外 (throw)

当程序运行时,异常由 JVM 或使用语句手动生成。发生这种情况时,将在内存中创建异常对象,程序的主流被中断,并且 JVM 的异常处理程序尝试处理异常。

异常处理

在 Java 中,我们创建代码块,在其中我们预测需要使用 , , 和 构造进行异常处理。当在块中引发异常时,JVM 会在下一个模块中查找适当的异常处理程序。

如果模块具有所需的异常处理程序,则控制权将传递给它。如果不是,则 JVM 会进一步向下查找模块链,直到找到合适的处理程序。执行模块后,控制权将转移到可选模块。如果未找到合适的模块,则 JVM 将停止程序并显示(当前方法调用堆栈),如果存在该块,则在首先执行该模块后显示该模块。

异常处理示例: 以下是该方法的结果:

通常用于关闭任何流并释放在模块中打开/分配的任何资源。但是,在编写程序时,并不总是能够跟踪所有资源的关闭。为了使我们的生活更轻松,Java 的开发人员提供了该结构,该结构会自动关闭块中打开的任何资源。由于 版本7 中引入了 Java 功能,我们还可以将捕获异构异常组合到一个块中,使代码更加紧凑和可读。

例:

  • try{} catch
  • try{} catch{} finally
  • try{} finally{}

异常

public class Print {

     void print(String s) {
        if (s == null) {
            throw new NullPointerException("Exception: s is null!");
        }
        System.out.println("Inside print method: " + s);
    }

    public static void main(String[] args) {
        Print print = new Print();
        List list= Arrays.asList("first step", null, "second step");

        for (String s : list) {
            try {
                print.print(s);
            }
            catch (NullPointerException e) {
                System.out.println(e.getMessage());
                System.out.println("Exception handled. The program will continue");
            }
            finally {
                System.out.println("Inside finally block");
            }
            System.out.println("The program is running...");
            System.out.println("-----------------");
        }

    }
}

main

Inside print method: first step
Inside finally block
The program is running...
-----------------
Exception: s is null!
Exception handled. The program will continue
Inside finally block
The program is running...
-----------------
Inside print method: second step
Inside finally block
The program is running...
-----------------

finally try try-with-resources try try-with-resources

public String input() throws MyException {
    String s = null;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
        s = reader.readLine();
   } catch (IOException e) {
       System.out.println(e.getMessage());
   }
    if (s.equals("")) {
        throw new MyException ("The string cannot be empty!");
    }
    return s;
}
public String input() {
    String s = null;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
        s = reader.readLine();
        if (s.equals("")) {
            throw new MyException("The string cannot be empty!");
        }
    } catch (IOException | MyException e) {
        System.out.println(e.getMessage());
    }
    return s;
}

底线

通过在 Java 中使用异常,您可以通过创建 “备份路由” 使程序更加健壮,使用 catch 块将主代码与异常处理代码分开,并使用将异常处理的责任转移给使用您的方法的任何人。throws

微信H5网页授权通用方案:中转页破解域名限制,适配Hash/History路由 在Web开发中,OAuth 2.0授权码模式是实现第三方登录的通用标准,其核心原理是通过授权服务器颁发临时代码,再由客户端交换访问令牌。这一机制在微信公众号H5开发中尤为重要,用于安全获取用户身份。然而,微信平台对网页授权回调域名有严格的数量限制,这成为多子域名、多环境及微前端架构下业务扩展的主要瓶颈。其技术价值在于通过设计一个统一的中转授权页,将授权逻辑与业务逻辑解耦,让所有业务页面共享一个已配置的授权入口,从而突破域名配额限制。该方案的关键在于适配不同的前端路由模式,需精准处理Hash模式与Histor 阅读详情

相关推荐

DSP28335量产升级避坑指南:C2Prog串口烧录.hex文件,为什么我推荐COM1?

本文详细解析了DSP28335量产升级中C2Prog串口烧录.hex文件的最佳实践,重点推荐使用COM1端口以确保稳定性。通过实测数据和底层机制分析,揭示了Windows系统对COM1的特殊优化及C2Prog工具的时钟切换逻辑,帮助开发者规避常见陷阱,提升烧录成功率。

weixin_27066963的博客 384

Java的throws Exception

转:https://www.cnblogs.com/feichengwulai/articles/3793261.html 1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exce...

hanxiaoyong_的博客 7万+

BEVFormer vs BEVFusion:5个关键差异点帮你选对环视感知方案

本文深入对比了自动驾驶领域两大主流环视感知方案BEVFormer与BEVFusion。BEVFormer作为纯视觉BEV感知的标杆,通过注意力机制隐式学习深度,成本较低;而BEVFusion作为多模态融合典范,融合激光雷达与摄像头数据,在性能、小目标检测及极端环境鲁棒性上优势显著。文章从计算效率、部署成本、数据依赖性等五个核心维度提供选型指南,帮助技术决策者根据自身算力预算与传感器配置做出明智选择。

weixin_29306011的博客 123

Java 中throws Exception的使用

1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exception表示人为的抛出一个异常,例如: publicbooleaninsert(Newsn){ try{ ..... }catch{ thrownewException("这是我自己抛出的一个异常,如果我看到此段信息表示...

Pei_hua100的专栏 2907

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 518

从仿真到实体:基于Isaac Gym的X20机械狗与Kinova Gen3 Lite机械臂全身协同控制实战

本文详细介绍了基于Isaac Gym仿真平台,实现云深处X20机械狗与Kinova Gen3 Lite机械臂全身协同控制的完整实战流程。内容涵盖环境搭建、模型适配、分阶段训练策略、域随机化技巧,以及最终将训练好的策略安全部署到实体机器人的关键步骤,为复杂机器人系统的仿真到实体迁移提供了宝贵经验。

yhn45678901的博客 489

java的异常处理简单说明之————throws exception

Java 中异常的处理 throws Exception放在方法后边,表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception) ,而且被调用处必须处理,即:人为地抛出一个异常。 代码示例1: public boolean insert(News n) { try{ ..... }catch{ throw new Exception("这是我自己抛出的一个异常,如果我看到此段信息表示我这个方法这儿出错了,并且我能自己看到。"); }finally{ }

gmo的博客 7728

【信号与系统】Multisim 仿真信号合成与分解

软件 Multisim 进行方波信号的产生、分解和合成,观察信号波形的分解与合成,加深对信号频谱的理解。

AXYZdong的博客 2万+

throws Exception异常是怎么回事

throws Exception异常是怎么回事 老师们帮忙说明一下。 他和 try {} catch 有什么区别 2011-05-10 11:30提问者采纳 答题闯关,过关即送礼!快来参加~ 在方法声明部分使用,表示该方法可能产生此异常,如果在方法声明处使用了throws声明异常,则该方法产生异常也不必捕获,

shuangziqiqi的专栏 4138

Vue3 - 解决报错 Uncaught (in promise) DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node

vue3,报错,vue3报错,Uncaught(inpromise)DOMException:Failedtoexecute'insertBefore'on'Node':Thenodebeforewhichthenewnodeistobeinsertedisnotachildofthisnode,如何解决这个错误,动态渲染,v-if,v-show,insertBefore,详细解决方法,vue3未能在“Node”上执行“insertBefore”:要插入

🏆 前端领域优质创作者 1万+

辉芒微教程第五篇《定时器0实现LED灯闪烁》

定时器定时器,一听就跟个闹钟似的,对于嵌入式定时器大部分的应用中,也的确可以这么理解,但是这只能肤浅地这么理解,实际其功能不仅仅是用来计数定时,但是对于我们这种8位单片机,这么理解就够了。

qq_41809823的博客 723

JAVA 异常Exception讲解

Excetion精讲,不懂得来看!!

weixin_65728526的博客 9154

python中视觉检测怎么将多个面拍照的图片合成一个3d图像,用什么技术或者什么模型?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 708

【Java基础】之深入讲解Java异常

本博客深入讲解了Java的异常机制。

王廷云的博客 365

计算机控制技术及应用

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java中异常机制的讲解

异常的处理方式之一:捕获异常try语句指定了一段代码,该段代码就是异常捕获并处理的范围。在执行过程中,当任意一条语句产生异常时,就会跳过该条语句中后面的代码。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。一个try语句必须带有至少一个catch语句块或一个finally语句块。注意事项当异常处理的代码执行结束以后,不会回到try语句去执行尚未执行的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

m0_74255413的博客 1192

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java异常讲解

本文介绍了Java异常处理的基本概念和用法。主要内容包括:1) 异常分类:运行时异常(RuntimeException)和非运行时异常(检查异常);2) 异常处理方式:JVM默认处理和使用try-catch捕获;3) 捕获异常的注意事项:多个catch语句的顺序和父子类异常关系;4) 异常常用方法,如printStackTrace;5) 自定义异常的实现方法:通过继承Exception创建检查异常或继承RuntimeException创建非检查异常。文章通过代码示例展示了异常的实际应用场景和处理技巧。

2301_80165178的博客 260

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 最全异常讲解

Java知其所以然导引问题实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格...

Java笔记虾 494

java详细讲解之异常

Java中虽然已经内置丰富的异常类,但并不完全表示实际开发中所遇到的一些异常。例如:实现用户登录if(!} if(!} System , out . println("登陆成功");} }此时我们在处理用户名密码错的时候可能就需要抛出两个异常,我们可以基于已有的异常类型进行拓展。具体方式:1.自定义异常类,然后继承自Exception或者RunTimeException2.实现一个带有String类型参数的构造方法} }此时我们login代码可以变成if(!

m0_72565784的博客 389

Java最全异常讲解

原文链接 摘要: 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了 等等。 导引问题 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能...

weixin_40581980的博客 1341

【Java开发日记】我们详细地讲解一下 Java 异常及要如何处理

帮助你全面理解 Java 异常机制,并教你如何在实际开发中有效地处理异常。

wangjinjin180的博客 821

java异常详细讲解_java异常的讲解

java的异常类----Throwable是所有异常类的超类哦,俗称:超人Throwable|--Error|--Exception|--NullPointException|--..........我们可以自定义地去编写一些异常类,根据我们的需要去,在java中系统已经帮我们编写好了好多异常类,我们可以调用它,也可以重写这些异常类异常应该注意的地方:class FuException exten...

weixin_39958366的博客 163

classcastexception异常_Java 最全异常讲解

Java知其所以然导引问题实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了。等等。软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是:Exception,意思是例外。这些,例外情况,或者叫异常,...

weixin_39941262的博客 1256

java异常详细讲解_Java异常处理机制的详细讲解和使用技巧

一起学习1. 异常机制1.1异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。1.2传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实...

weixin_30649185的博客 364

Java入门级教程4——Java异常的详细讲解

本文系统介绍了Java异常,分为Error(JVM致命错误)和Exception(程序可控异常)。Exception又分为检查异常和非检查异常。此外还介绍了异常的处理方式包括try-catch捕获、throws声明抛出,以及finally块确保资源释放等内容。

weixin_74137141的博客 1040

讲解JAVA 异常处理问题大全

JAVA 异常类型结构 Throwable是所有异常类型的基类,Throwable下一层分为两个分支,Error和Exception. Error 和 Exeption Error Error 描述了 JAVA 程序运行时系统的内部错误,通常比较严重,除了通知用户和尽力使应用程序安全地终止之外,无能为力,应用程序不应该尝试去捕获这种异常。...

aa7877954的博客 126
上一篇: 【Java】堆栈跟踪
下一篇: 【接口测试】requests 库请求体字符串解码
Warolitbos
博客等级 码龄7年 108粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Warolitbos

如果有帮助,请我喝咖啡!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值