首页 > 编程语言 >Java--异常

Java--异常

时间:2024-08-16 14:50:28浏览次数:10  
标签:语句 Java -- 抛出 try finally catch 异常

目录

概念

异常就是程序在编译时发生的意想不到的情况,一般而言分为两类:错误(Error)和异常(Exception)

Java异常类结构图

Error类和Exception类区别

Error类:一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理

Expection:Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件

​ (1)SQLException:该异常提供关于数据库访问错误或其他错误的信息。

​ (2)RuntimeException` 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类

​ (3)IOException:此类为异常的通用类,它是由失败的或中断的 I/O 操作生成的。

Exception异常分类

运行异常(RuntimeException)

ArrithmeticException
MissingResourceException
ClassNotFoundException

NullPointerException
lllegalArgumentException
ArrayIndexOutOfBoundsException
UnkownTypeException

非运行时异常(受检查异常类)

EOFException
FileNotFoundException

异常处理机制

抛出异常(throw与throws用法)->捕获异常(处理顺序)->异常传播

throw、throws关键字

throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。如果所有方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息。如果抛出 的是Error或RuntimeException,则该方法的调用者可选择处理该异常。有关异常的转译会在下面说明。 throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。 当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣一般在catch块中打印一下堆栈信息做个勉强处理。下面给出一个简单例子,看看如何 使用这两个关键字:

public static void test3() throws Exception{ //抛出一个检查异常 throw new Exception("方法test3中的Exception"); }

Throwable类中的常用方法

getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。

getMessage():返回异常的消息信息。 printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。

异常处理的基本语法

在java中,异常处理的完整语法是: try{ //(尝试运行的)程序代码 }catch(异常类型 异常的变量名){ //异常处理代码 }finally{ //异常发生,方法返回之前,总是要执行的代码 }

以上语法有三个代码块: try语句块,表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象。

catch语句块会捕获try代码块中发生的异常并在其代码块中做异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。当 try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配,若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对 象。catch语句可以有多个,用来匹配多个中的一个异常,一旦匹配上后,就不再尝试匹配别的catch块了。通过异常对象可以获取异常发生时完整的 JVM堆栈信息,以及异常信息和异常发生的原因等。

finally语句块是紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行,而不管是否try语句块是否发生异常。并且这个语句块总是在方 法返回前执行。目的是给程序一个补救的机会。这样做也体现了Java语言的健壮性

try、catch、finally三个语句块应注意的问题

第一、try、catch、finally三个语句块均不能单独使用,三者可以组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个

第二、try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面

第三、多个catch块时候,只会匹配其中一个异常类并执行catch块代码,而不会再执行别的catch块,并且匹配catch语句的顺序是由上到下。

标签:语句,Java,--,抛出,try,finally,catch,异常
From: https://www.cnblogs.com/yangcurry/p/18362832

相关文章

  • 【代码随想录】二、链表:2、设计链表
    部分图文参考于:代码随想录-707.设计链表。这道题目设计链表的五个接口:●获取链表第index个节点的数值●在链表的最前面插入一个节点●在链表的最后面插入一个节点●在链表第index个节点前面插入一个节点●删除链表的第index个节点可以说这五个接口,已经覆盖了链表的......
  • 4、zabbix-图形监控的使用-监控某个主机、应用
    修改界面语言: ==============================================1、创建主机群组-用来放置管理监控对象=======================================================  ===================================================2、创建主机--》添加监控对象===================......
  • 【代码随想录】二、链表:1、移除链表元素
    部分图文参考于:代码随想录-203.移除链表元素。C++编程中记得要手动释放结点内存。链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点再进行删除操作。1.题目链接203.移除链表元素2.思路以链表1424来举例,移除元素4。如果使用C,C++编程语言的话,......
  • "一基双台三智" 中电金信智慧监督解决方案构筑国央企风控堡垒
    近年来,国务院国资委先后下发《关于进一步排查中央企业融资性贸易业务风险的通知》、《关于规范中央企业贸易管理严禁各类虚假贸易的通知》等各类监管法规,并在2024年初中央企业工作会议中提出对财务数智化转型及重点领域风险把控的要求,国资委对财务公司在虚假贸易、民企挂靠等方面......
  • Java 8 Stream API: 深入理解与高效使用
    Java8StreamAPI:深入理解与高效使用大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Java8引入的StreamAPI为集合操作提供了一种声明式的处理方式,它不仅可以使代码更加简洁易读,还能提高性能。本文将深入探讨StreamAPI的内部机制,并展示如何高效......
  • 【代码随想录】二、链表:理论基础
    原文链接:代码随想录-链表理论基础。1.什么是链表?链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。2.链表的类型2.1.......
  • ToDesk远程控制移动端使用教程!这些功能必用!
    不得不说,ToDesk的移动端还挺全面,在界面,文件传输等使用操作上都有了新变化,还增加了了免费的标注功能。小社长身先士卒更新了一波,用下来发现ToDesk移动端真香!接下来让咱们启动新版ToDeskApp,一起来挖掘这些新功能有多好使吧~全新使用界面,优化远程步骤相比之前的移动端页面,新版的......
  • WPF 触发器
    一、样式触发器样式触发器可以在指定的控件属性满足某种条件后进行一些样式的变换,当触发条件不满足时恢复原样。样式触发器的简单使用<Window.Resources><Stylex:Key="checkBoxStyle"TargetType="CheckBox"><Style.Triggers><TriggerProperty="......
  • 大文件怎么快速传?ToDesk全面支持安卓、ios、windows、mac
    远程办公要传大文件怎么办?小社长来教你一招快速完成文件传输......
  • Nginx部署时反向代理双斜杠问题
    我的Django+Vue前后端分离的项目,当我打包上服务后发现我的接口出现了双斜杠,Django无法识别比如这:种http://host//file_list,双斜杠出现在了中间本带开发环境和服务器的区别是服务器多了一层nginx代理,罪魁祸首应该发生在Nginx上;然后去网上查了一些方法,都不管用,最后还是ChatGP......