JavaSE学习总结:异常处理

2023-11-17

1、什么是异常

  • 不是语法错误
  • 不是逻辑错误
  • 而是在程序运行中,一些不可控的因素,不期而至的各种状况,导致程序运行异常。
  • 例如:文件不存在,网络中断,非法输入等

2、异常的处理机制的原理,过程

  • Java程序在某句代码处发生了异常,JVM会new合适的异常对象,并把异常的信息封装到对象中,然后抛出,如果该代码没有环绕try…catch块,那么会先向上(调用者)抛出,如果上级也没有处理,那么一直往上抛,最终可能到达JVM,导致程序中断。如果其中有一个部分将这个异常对象“捕获”,程序继续进行,不会中断。

3、异常的体系结构

1、java.lang.Throwable

  • Java 语言中所有错误或异常的超类。
  • (1)只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。
  • (2)只有此类或其子类之一才可以是 catch 子句中的参数类型。

2、java.lang.Error

  • 用于指示合理的应用程序不应该试图捕获的严重问题。
  • 例如:VirtualMachineError虚拟机错误
  • StackOverflowError栈溢出
  • OutOfMemoryError内存溢出

3、java.lang.Exception

  • 受检异常

  • 在编译阶段必须编写“异常处理”的代码,否则编译不通过

  • ParseException

  • IOException FileNotFoundException

  • SQLException

  • 运行时异常

  • RuntimeException

  • 在编译阶段不要求强制编写“异常处理”的代码,但是希望程序员,尽量避免
    ClassCastException
    NullPointerException
    ArrayIndexOutOfBoundsException

4、异常的处理机制

1、抛

(1)JVM自动抛
(2)throw 异常对象; (1)JDK中定义异常类型;(2)自定义异常类型

2、抓

5、异常处理

1、捕获处理

  • 语法
    try{
    可能发生异常的代码;
    }catch(异常的类型 对象名){
    异常的处理代码
    }…
    finally{
    无论是否发生异常都会运行的代码
    }

  • 说明
    (1)try不可以单独存在,要么和catch,要么和finally一起使用try{}catch(){}finally{}
    try{}catch(){}
    try{}finally{}

(2)catch可以多个,但是执行时,如果发生异常,只会进入其中一个
(3)多个catch()中的类型不能相同。如果是“互斥”关系,某个异常不是继承关系,顺序随意。
如果“包含”‘关系,异常之间有继承关系,子上父下。
(4)finally
无论是否发生异常都会运行的代码,一般编写释放资源的代码。
尽量避免在finally写return语句

2、上报处理

throws,语法格式:【修饰符】 返回值类型 方法名(形参列表)throws 异常列表。
把异常抛给调用者处理。

6、throw

用于手动抛出异常对象
可以抛出系统已定义异常,也可以抛出用户自定义异常
throw可以代替return语句结束方法,但是没有返回值

7、重写与异常列表

重写方法的要求:
两同:方法名与形参列表
两小:
返回值类型,基本数据类型与void:必须相同。引用数据类型: 子类的方法的返回值类型可以是父类被重写方法的返回值类型的子类。
异常类型,子类抛出的异常类型 要么和父类被重写方法抛出的异常一样,要么是父类被重写方法抛出的异常的子类。
一大 :权限修饰符。子类方法的权限修饰符 》= 父类被重写方法的权限修饰符。
public > protected>缺省>private

8、finally与return都存在

没有异常:try–>【返回值赋值】–>finally–>结束方法。
有异常:try–>catch–>【返回值赋值】–>finally–>结束方法。

9、自定义异常

是一个类,必须继承Throwable或它的子类
必须通过throw才能抛出

public class MyException extends Exception{
	
	/**
	 * 序列版本号唯一的标识当前类
	 */
	private static final long serialVersionUID = 6650357798030558092L;

	public MyException(){}
	
	public MyException(String msg){
		super(msg);
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaSE学习总结:异常处理 的相关文章

  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • 在 Jenkins 内运行构建时,我收到“java/lang/OutOfMemoryError”

    2020 02 25 10 11 24 986 0000 id 79 信息hudson model AsyncPeriodicWork lambda doRun 0 开始maven repo cleanup 2020 02 25 10 11
  • 仅使用 ServletContext 查找应用程序的 URL

    我正在使用 Spring MVC 编写一个 Java Web 应用程序 我有一个后台进程 它会遍历数据库并查找必须通过电子邮件发送给我的用户的通知 这些电子邮件需要包含应用程序的超链接 对于网络应用程序来说 这似乎是相当常见的模式 但我遇到
  • 将 Spring Boot 应用程序部署到 Heroku 失败并显示“无效标志:--release -> [帮助 1]”

    当我尝试将代码部署到 Heroku 时 通过git push heroku master 我收到 Maven 错误 remote ERROR Failed to execute goal org apache maven plugins m
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Android - Java - 发送 facebook 聊天消息的意图(facebook 禁用 xmpp)

    Facebook 已弃用 xmpp API 有没有办法打开意图 或将数据传递到fb 以在Android设备上发送聊天消息 设备上安装的 Facebook 和 Messenger 应用 谢谢 您需要将 uri 传递给意图 这里10000572
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 序言中不允许引用

    请帮我找到这个异常的原因 我使用以下罐子 core renderer jar itext paulo 155 jar 第一个文档 xhtml lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE h
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • GAE - Eclipse 中的开发服务器未更新?

    我在 Eclipse 上使用 Google AppEngine 开发服务器 我的本地网页似乎没有更新 直到我在开发服务器上进行了多次重新启动 使用 Eclipse 中的 运行 或 调试 按钮 我究竟做错了什么 基本流程是 更改 java 文
  • 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

    我正在 Java 项目中设计一个高级搜索选项sqlite在 NetBeans 中 有5种不同JTextfields和 5 列 我想填充JTable具有相应的匹配标准 如果一个JTextfield为空 那么它应该选择该列的所有项目 我使用的查
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • SAXParseException:找不到元素“定义”的声明

    我对 camunda 和 DMN 完全陌生 我试图在 spring boot 中运行 DMN 示例 链接在这里 https github com camunda camunda bpm examples tree master dmn en
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • HDU-2000

    题目本身不难 但是对于初学者 难的是数据的读入 方法一 使用getchar 去除每一行的空格符 include
  • git撤回push代码方法 分支受保护 不受保护时 详解

    git撤回push代码方法 分支受保护 不受保护时 详解 1 分支受保护时用revert 1 先说结果 如果分支受保护 那么就不能reset方法来撤回 原因后面说 那么需要通过revert来撤回 2 可以的方法 git revert能够生成
  • STL中的排序算法一览[By ACM郭老师]

    这篇文章我很喜欢 是郭老师的新作 希望大家喜欢 详细的从算法的效率方面来说明了排序算法 STL中有多种排序算法 各有各的适用范围 下面听我一一道来 I 完全排序 sort 首先要隆重推出的当然是最最常用的sort了 sort有两种形式 第一
  • python知识系列:os.path.listdir的坑

    问题描述 os path listdir在返回中文路径时 返回的是0xd4等非gbk或utf 8格式的编码 不知道具体编码格式是什么 E Projects PythonProjects DirectorySearchTest 3918L E
  • 【C++历险记】面向对象

    个人主页 兜里有颗棉花糖 欢迎 点赞 收藏 留言 加关注 本文由 兜里有颗棉花糖 原创 收录于专栏 C 之路 本专栏旨在记录C 的学习路线 望对大家有所帮助 希望我们一起努力 成长 共同进步 目录 一 多继承以及菱形继承 二 多继承引发的问
  • 优加DaaS背后,看见新的营销潮

    DaaS 融合开放 这是京东云优加对外传递出来的两个最清晰的声音 前者对应的是能力和边界 后者对应的是态度和打法 两者结合 恰构成了京东云优加 或者说京东在营销侧的未来想象力 作者 皮爷 出品 产业家 今年我们有接近60 以上的营销费用花在
  • Sublime Text 工具安装&配置

    一 安装 官网下载 https www sublimetext com download Windows 下载下来为exe安装程序 portable version 下载下来为zip压缩包 解压后无需安装就能运行 二 安装插件 插件官网 h
  • HIT--ICS计算机系统大作业

    目录 摘要 第1章 概述 1 1 Hello简介 1 2 环境与工具 1 3 中间结果 1 4 本章小结 第2章 预处理 2 1 预处理的概念与作用 2 2在Ubuntu下预处理的命令 2 3 Hello的预处理结果解析 2 4 本章小结
  • 伪类和伪元素的区别?

    前言 伪类和伪元素是CSS中的两种特殊方式 可以对HTML元素添加一些不同于普通选择器样式的显示效果 它们的实现方法类似 但其意义和使用方式有所不同 伪类 Pseudo Class 是在 CSS3 中引入的 用于描述元素的一些动态的和行为相
  • 蓝桥杯接龙数列(动态规划)

    蓝桥杯2023年第十四届省赛真题 接龙数列 C语言网 dotcpp com 我们要求最少删除多少个数 可以使剩下的序列是接龙序列 那么找到一条最长的接龙数列即可求出最少删除的个数 运用动态规划的思想 从前往后挨个考虑每个数字 一个前缀为6的
  • 五分钟带你了解Python基础知识【精华】

    Python基础知识详解 一 Python输出 1 repr 或 str 转成字符串 2 字符串填充空格进行格式化 3 a 使用 ascii s 使用 str 和 r 使用 repr 可以用于在格式化某个值之前对其进行转化 二 Python
  • .NET/C# 随机不重不漏的输出一个集合中的元素

    一 介绍 1 Random Random 类是一个产生伪随机数字的类 介绍 https docs microsoft com en us dotnet api system random redirectedfrom MSDN view n
  • C++primer习题3.14 vector读写字符

    include
  • sentinel-3卫星测高学习资料整理

    在学习过程中 整理关于sentinel 3测高的学习资料 1 SAR Radar Altimeter SRAL instrument specifics https eumetsatspace atlassian net wiki spac
  • pandas中DataFrame 数据合并,连接(merge,join,concat)

    pandas作者Wes McKinney 在 PYTHON FOR DATA ANALYSIS 中对pandas的方方面面都有了一个权威简明的入门级的介绍 但在实际使用过程中 我发现书中的内容还只是冰山一角 谈到pandas数据的行更新 表
  • Ubuntu16.04如何调整屏幕分辨率至1920*1080

    1 引言 ubuntu16 04桌面版安装好后 发现屏幕分辨率调整选项里没有1920x1080这一选项 经过一番研究 可通过如下方式进行屏幕分辨率设置 以下操作均在ubuntu16 04桌面版操作 不要用远程连接操作 否则xrandr命令会
  • 华为OD机试(2021-04)题目一

    题目 一个 0 1000 的整数 拆解为一个 本身 或多个连续自然数的和 按照自然数的个数从少到多输出各个方案 input solution 方案内的自然数按照从小到大排列 public static void main String ar
  • 循环“停止”的三种特殊语句

    对于一个初学者来说 循环的控制无疑是一个难点和重点 但是在有些时候循环是不需要执行完的 或者这个循环的这一次是不用执行的 那么我们如何来实现这些功能呢 下面通过一个例子来加以说明 1 break语句跳出就近的一层循环 while i lt
  • 渗透相关问题(3)

    1 sql注入绕过的方法 注释符号绕过 大小写绕过 内联注释绕过 双写关键字绕过 特殊编码绕过 宽字节绕过 2 WAF常用的类型 硬件设备类型 软件产品类型 基于云的WAF 3 sql注入漏洞防御方法 代码层面 对输入进行严格的转义和过滤
  • JavaSE学习总结:异常处理

    Java异常处理 1 什么是异常 2 异常的处理机制的原理 过程 3 异常的体系结构 1 java lang Throwable 2 java lang Error 3 java lang Exception 4 异常的处理机制 1 抛 2