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) |
JavaSE基础知识(6)—异常和异常处理的更多相关文章
- JavaSE基础知识总结
最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- javaSE基础知识(走向编程的门口)— 更新完毕
前言:玩儿编程最重要的一点:不要怕麻烦,感觉是在浪费时间: 能动手绝不哔哔:只要脑袋不傻,编程都是"一看就会,一练就废",开始学的时候,就算再基础的东西都建议手敲一遍 要有囫囵吞枣 ...
- javase基础笔记4——异常/单例和类集框架
继承 extends final关键 多态 是在继承的基础上 接口 interface 异常 exception 包的访问可控制权限 private default protect public 异常 ...
- Spring MVC基础知识整理➣国际化和异常处理
概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...
- JavaSE基础语法学习-异常
异常 异常指程序运行中出现的不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等. 异常发生在程序运行期间,它影响了正常的程序执行流程. 比如说,你的代码少了一个分号,那么运行出来结果是提示是 ...
- JavaSE基础知识(4)—数组的应用
一.数组的特点.好处及使用步骤 1.数组的好处 特点:相当于用于保存一组元素的容器好处: 1.提高代码的简洁性和扩展性,且同时开辟多个空间,提高了效率 2.分类存储,且空间是连续的,容易查找 2.数组 ...
- JavaSE基础知识(3)—流程控制结构
一.顺序结构 1.说明 程序从上往下依次执行,中间没有任何跳转或选择2.特点 变量必须遵循 “前向引用” (局部变量必须先声明.赋值,然后再使用!) 二.分支结构(条件) 1.说明 程序从两条或多条路 ...
- JavaSE基础知识(2)—变量和运算符
一.变量 1.理解 概念:内存中的一块数据存储空间 2.变量的三要素 数据类型变量名变量值 3.变量的语法和使用步骤★ 步骤1:声明变量(计算机开辟一块空间) 数据类型 变量名;步骤2:为变量赋值(初 ...
随机推荐
- linux git 保存账号密码
vi .git/config [credential] helper = store git pull 输入用户名.密码自动保存
- vs2017安装和使用教程(详细)
借鉴:https://blog.csdn.net/qq_36556893/article/details/79430133#一.官网下载
- java中二维数组的排序
首先定义一个5X8的二维数组,然后使用随机数填充满.借助Arrays的方法对二维数组进行排序.参考思路:先把二维数组使用System.arraycopy进行数组复制到一个一维数组然后使用sort进行排 ...
- Java——@SupressWarnings
J2SE 提供的最后一个批注是 @SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. 背景:J2SE 5.0 为 Java 语言增加了几 ...
- linux服务器后台运行服务
linux 后台运行一个服务 难免会遇到在Linux,后台执行任务.下面,总结了一下关闭窗口任然在后台执行的方法,例如 #执行一个打包命令 tar czf /data/backup.tgz /data ...
- postgresql 创建gin索引
1.创建gin类型的索引 postgresql 创建gin索引遇到的问题:1.ERROR: operator class "gin_trgm_ops" does not exist ...
- Android开发 集成极光推送中的问题
AndroidManifest.xml清单文件报错: cn.jpush.android.service.DataProvider@exported value=(true)报错,解决如下: 根据报错行 ...
- 宝塔面板配置阿里云SSL证书流程
阿里云SSL证书申请过程就不在这里说了 1 先下载阿里云成功申请的SSL证书 解压后 有3个文件 2 找到宝塔面板的 站点设置 找到SSL设置 3 找到其他证书 用文本打开.key文件 复制里面 ...
- request.getRealPath为什么会被代替
以及前两天在网上看到的“不是工程的物理路径封装在Session里 是工程的路径被封装在了ServletContext中的问题” 很抱歉没有找到答案. 只能怪鄙人才识短浅. 在通过这次学习的过程中使我懂 ...
- 学习Flask框架
# -*- encoding: utf-8 -*- #导包 from flask import Flask #建立flask对象 app = Flask(__name__) #使用flask路由器 ...