JavaSE基础知识(6)—异常和异常处理
一、异常的理解及体系结构图
1、理解
异常:程序运行过程中发生的不正常现象。
java中的错误:
语法错误
运行异常
逻辑错误
2、体系图
java程序在执行过程中所发生的异常分为两类:
Error:Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况(StackOverflowError、OOM),一般不编写针对性的代码进行处理
Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。
常见的异常可分为两类:运行时异常和编译时异常。异常体系图如下,其中红色部分为受检异常,蓝色部分为非受检异常。
二、异常处理的方式
1、抓模型
(1)语法
try{
①
//容易出现异常的代码
②
}catch(异常类型 e){
//处理异常的语句
③
}finally{
//最后一定要执行的语句
④
}
⑤
执行顺序 ★
如果出现了异常: ①③④一定执行,⑤不一定。如果异常被成功捕获,而且没有其他跳转,⑤会执行,否则⑤不执行
如果没有出现异常:①②④一定执行, ⑤不一定。如果没有其他跳转,⑤会执行,否则⑤不执行
(2)好处
①提高了用户体验性
②将正常代码和容易出错的代码实现了分离,提高了代码的阅读性和维护性
③如果成功捕获异常,则起到了拦截异常的作用,异常后面的语句会正常执行
(3)注意事项
①catch块可以省略
②finally块可以省略
③尽量使用多个catch块,代替多个try catch
④不能滥用异常
⑤catch块可以有多个,但如果catch块的异常类型为父类类型,需要将该catch块放在最后
2、抛模型(默认异常处理方式)
(1)语法
修饰符 返回类型 方法名(参数列表) throws 异常类型XX{
}
注意:异常类型XX为方法中容易出现的异常的类型或父类类型
(2)执行特点
将异常抛给调用方,如果调用方不处理,则继续往上抛,直到抛给jvm。而jvm使用的是默认的处理方式。e.printStackTrace()
三、自定义异常
1、语法
class XXException extends Exception或RuntimeException{
public XXException(){}
public XXException(String msg){super(msg);}
}
2、如何使用自定义异常
在需要生成异常对象的地方,添加如下语句:
throw new XXException(异常信息);
四、常见问题解答
1、生成异常对象的方式
2种方式:
方式一:系统自动生成异常对象
针对于:系统定义好的异常类
方式二:手动生成异常对象
针对于:系统定义好的异常类和自定义的异常类
语法:throw new 异常类型(实参);
2、子类重写父类方法的异常说明
子类重写的方法抛出的异常类型可以相同或为子类类型
class Father{
public void run() throws Exception{}
}
class Son extends Father{
public void run() throws Exception{}
}
class Daughter extends Father{
public void run() throws IOException{}
}
3、throws和throw对比
说明 | 放的位置 | 后面跟的东西 | |
throws | 异常处理的方式 | 方法声明的地方 | 异常类型 public void method throws XXXException{} |
throw | 生成异常对象的关键字 | 方法体中 | 异常对象 throw new XXXException(msg) |
转载于:https://www.cnblogs.com/truthseeking/p/9538320.html
JavaSE基础知识(6)—异常和异常处理相关推荐
- 【JavaSE 基础知识盲点小结】
[JavaSE 基础知识盲点小结] 一.第一天: 1. 在 cmd 命令窗口问题: ①编译是: javac HelloWorld.java ②运行时是: java HelloWorld (类名 不加 ...
- java 数字运算异常_Java基础之:异常及异常处理
Java基础之:异常及异常处理 我们将java程序执行过程中出现的不正常现象称为异常,例如:之前遇到的数组下标越界异常,空指针异常等等 执行过程中发生的异常事件分为两类: Error(错误):Java ...
- Javase基础知识总结
今天11.25,我开始了第二天的写日记 我也开始了我的整理笔记 我希望我可以一直坚持下去 我不想为了未来的我后悔 加油 Javase基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我 ...
- JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...
- 面向对象-----6(javaSE基础知识完结篇)
目录 解析面向对象 内存分析 三大特性.封装.继承.多态 接口 内部类 涉及知识目录总览: 资料来自于马士兵java笔记 这是javaSE基础知识的最后一篇笔记 1. 解析面向对象 返回目录 [1]面 ...
- JavaSE基础知识(附上代码实现)1
###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动. ...
- JavaSE基础知识回顾
文章目录 JavaSE 一.前言 1.1.解决大家的疑惑 1.2.Java和Python的抉择 1.3.走进Java 二.预科 2.1.学习准备:博客 2.2.MarkDown 2.3.基本Dos命令 ...
- JavaSE基础知识汇总
1.Java基础 函数与类前面的修饰符示例 控制结构示例 包含的内容有:for循环.while循环.switch语句,if语句 public static void main(String[] arg ...
- JavaSE基础知识(个人总结)
声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章 2. 由于是个人总结, 所以用最精简的话语来写文章 ...
最新文章
- 如何快速搭建 LaTeX 轻量级写作环境(VSCode)?
- SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流...
- html中如何屏蔽一段代码,html中如何使用python屏蔽一些基本功能(示例代码)
- yzmcms图片自适应代码_[ NeurIPS 2020 ] 一叶知秋 —— 基于“单目标域样本”的领域自适应方法...
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
- 凝结时光:ImageMagick 制作 gif
- 集训队脱单大法:这是一道只能由学姐我自己出数据的水题(牛客竞赛)
- 传递函数_使用python计算麦克风阵列信号的传递函数
- 朴素贝叶斯法(Naive Bayes,NB)
- oracel 数据库问题 ORA-12547 ORA-12571
- 程序流程三控制,顺序控制,分支控制,循环控制综合练习题
- 乐max2 android9,辣评烩:乐Max 2即将升级EUI 6.0 基于安卓7.0!
- 五寸照片尺寸是多少?如何自己制作证件照?
- 巴特沃斯数字低通滤波器的设计步骤
- python imshow彩色_matplotlib实现显示伪彩色图像及色度条
- 用JAVA输入一位整数,当输入1-7时显示对应的英文星期名称缩写
- TLV协议——实现封包与解析
- js获取android系统版本号,JS获取系统版本和手机型号
- 模糊数学(Fuzzy Mathematics)理论基础
- android设置页面转场特效