Java基础复习07:异常处理(编译时异常处理、运行时异常处理、try-catch-finally、自定义异常)

目录

一、异常概述

异常简介

学习异常→注意避免异常→当异常真的发生 学会处理异常

异常体系

编译时

运行时


编译时和运行时出现的时机:

常见的运行时异常

运行时异常:

ArrayIndexOutOfBoundsException

NullPointerException

ClassCastException

有继承/实现关系 都能强转(instanceOf)

ArithmeticException

NumberFormatException

常见的编译时异常

编译时异常继承了Exception或其子类(但是没有继承RunTimeException )

Java提供的编译时异常大多是一种善意的提醒 遇到了就注意下并处理异常就行了

ParseException 提醒格式可能写错了



FileNotFoundException 提醒文件路径可能写错了

UnsupportedEncodingException 提醒字符集可能写错了

IOException

二、异常处理

异常的默认处理流程

默认的处理机制并不好 因为一旦出问题 程序立即就终止了

在26行创建了一个异常对象 然后把该对象抛给调用者 调用者再抛给main方法 最后抛给JVM虚拟机

编译时异常处理方式1:throws

方式1和默认的类似 如果最终抛给了JVM 一旦程序有问题就终止了

throws用在方法上 自己不处理 抛给方法调用者

但是如果最终抛给了JVM 出异常就会导致程序结束

编译时异常处理方式2:try catch

try catch用在方法内部 Ctrl+Alt+T快捷键
没有把异常抛给虚拟机 自己处理了 如果出现异常程序可以继续执行

分别捕获:

如果出错 两个异常都会捕获到

一起捕获更合逻辑:

第一个bug出现了 就不会继续往下了 因为是一个整体的连续逻辑

最规范的写法:

编译时异常处理方式3:两种方式结合

方法直接将异常throws给方法调用者 方法调用接收到异常后再try catch处理

上层调用者能知道下面方法执行的情况 并且不会抛给JVM不会导致程序直接结束

运行时的异常处理方式

运行时异常可以不处理(如果充分自信自己的代码没问题) 编译阶段不报错

建议还是处理 只需要在方法调用的地方try catch一下即可

这样即使代码有问题 程序也不会直接被JVM终止 (运行时异常会自动throws)

try-catch-finally

finally代码块一定会执行 除非虚拟机没了

无异常:执行try代码块→如果try有return语句 先把返回值并暂存 不真的返回 →执行finally代码块→如果finally没有return 返回暂存值;否则返回finally的返回值

有异常:执行catch代码→步骤同上


不要在finally里写return语句:

方法调用 没有异常→执行try代码块→暂存c 不返回→执行finally代码块→返回暂存的c

方法调用 没有异常→执行try代码块→暂存c 不返回 →执行finally代码块→10000覆盖前面的c→返回10000

三、自定义异常

3.1 作用

可以自定义编译时异常/运行时异常

3.2 自定义编译时异常

认为某个地方非常重要 需要醒目提醒程序员不要写错 就可以定义一个编译时异常

throw:在方法内部 直接创建一个异常对象 并从此点抛出

throws:用在方法申明上 抛出方法内部的异常给方法调用者

当把自定义的编译时异常抛出 又回到前面异常处理的几种方式了

这里又可以直接throws 或者try catch

编译时异常 是一个醒目的提醒 提醒程序员这里传参的年龄一定要注意

3.3 自定义运行时异常

编译阶段不报错(不需要那么强烈的去提醒程序员) 运行阶段可能会报错



相关推荐
李长渊哦1 分钟前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
pixelpilot10 分钟前
Deta Surf:把笔记、文件和网页塞进同一个 AI 工作台
笔记·其他
代码山河31 分钟前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
蒸蒸yyyyzwd1 小时前
学习笔记 复盘
笔记·八股
旖旎夜光1 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
Escalating_xu2 小时前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
程序猿乐锅2 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路2 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData3 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat3 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm