Java 异常处理专题,从入门到精通
内置异常和Throwable核心方法
Java内置异常
可查异常(必须要在方法里面捕获或者抛出)
- ClassNoFoundException 应⽤程序试图加载类,找不到对应的类
- IllegalAccessException 拒绝访问⼀个类的时候
- NoSuchFieldExcetion 请求的变量不存在
- NoSuchMethodException ⽅法不存在
不可查异常
- ArrayIndexOutOfBoundsException 数组索引越界
- ClassCastException 强制失败抛出异常
- NullPointerException 需要对象的地⽅使⽤ null 时,抛出该异常
- NumberFormatException 将字符串转换成⼀种数值类型,但该字符串不能转换为适当格式时,抛出该异常
Throwable类核心方法
- public String getMessage()
- 异常的详细信息
- public synchronized Throwable getCause()
- 异常原因
- publicvoid printStackTrace()
- 打印错误的堆栈信息,即错误输出流,可以看到错误原因和所在位置
- private synchronized StackTraceElement[] getOurStackTrace()
- 堆栈层次的数组,下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底
Try Catch异常捕获
异常处理之捕获语法
try{
// 可能发⽣异常的代码
}catch(AExceptionName e){
//出异常的时候处理
}catch(BExceptionName e){
}fianall{
}
- try后面跟一个或多个catch块,或一个finally块,或两者的组合
- catch不能独立于try而单独存在
- 如果代码没有对应的异常类进行捕获,则默认打印异常堆栈
异常进阶
finally和多重异常捕获
一个try代码块后面跟多个catch代码块的情况就叫多重捕获
语法
try{
// 可能发⽣异常的代码
}catch(ExceptionName1 e1){
//出异常的时候处理
}catch(ExceptionName2 e2){
//出异常的时候处理
}
代码中发生异常,异常被抛给第一个catch块,如果不匹配则继续往下一个catch进行传递
finally关键字
- 用来创建在try代码块后面执行的代码块
- finally代码块中的代码总会被执行
- 一般用于资源回收释放等操作
语法
try{
// 可能发⽣异常的代码
}catch(ExceptionName1 e1){
//出异常的时候处理
}finally{
//肯定执⾏的代码
}
或者
try{
// 可能发⽣异常的代码
}finally{
//肯定执⾏的代码
}
throws/throw关键字
异常的抛出throw和声明throws
代码出异常常见的处理方法
- try catch捕获
- throws声明异常,往外抛出
- 语法:throws子句放在方法参数列表的右括号之后,一个方法可以声明抛出多个异常,多个异常之间用逗号隔开
例子
public class Main {
public static void readChar() throws IOException,RemoteException {
int input = System.in.read();
}
}
- try catch中捕获了异常,处理方法
- 当前捕获自己处理
- 捕获自己处理然后继续往外面抛异常
语法
throw new ExceptionName("异常信息");
例子
throw new IOException("File not found");
总结
当抛出异常被检查的异常,我们必须使用try-catch块来处理它,或者在方法声明中使用throws子句继续往外抛
自定义异常
为什么要使用自定义异常
- 当前JDK内置的一出场不满足需求,项目会出现特有异常
- 自定义异常可以让业务更清晰
如何自定义异常
- 异常都是继承自Exception类,所以我们要自定义的异常也需要继承这个基类
例子
public class BaseException extends Exception {
private String errorMessage;
private String errorCode;
public BaseException(String errorCode, String errorMessage) {
super(errorMessage);
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
public String getErrorMessage() {
return errorMessage;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}
Java 异常处理专题,从入门到精通的更多相关文章
- Java并发编程从入门到精通 张振华.Jack --我的书
[当当.京东.天猫.亚马逊.新华书店等均有销售] 目 录 第一部分:线程并发基础 第1章 概念部分 1 1.1 CPU核心数.线程数 (主流cpu.线程数的大体情况说一下) 1 1.2 CPU时间 ...
- Java网络编程从入门到精通(27):关闭服务端连接
在客户端和服务端的数据交互完成后,一般需要关闭网络连接.对于服务端来说,需要关闭Socket和ServerSocket. 在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说 ...
- 《java从入门到精通》学习记录
目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...
- Java入门-浅析Java学习从入门到精通【转】
一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...
- 真正的Java学习从入门到精通
http://www.it.com.cn/f/edu/059/6/169189.htm 一. 工具篇JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行 ...
- 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路
以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...
- 学java入门到精通,不得不看的15本书
学java入门到精通,不得不看的15本书 一.Java编程入门类1.<Java编程思想>2.<Agile Java>中文版 二.Java编程进阶类1.<重构 改善既有代码 ...
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述 PV操作是对信号量进行的操作. 进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...
- 《Java从入门到精通》src0-8
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello wo ...
随机推荐
- webpack4.X + react-router 路由跳转
webpack4.X react-router 环境准备工作:windows7.webStorm 2017.1.4.Nodejs 8.7.0.npm 5.4.2 PS:安装的时我们都带上版本,这样即 ...
- 2020年Web前端开发工程师市场怎么样?学会什么技术才能拿到高薪
几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,对上市公司乃至巨头这个问题也一样存在.据统计,国外的前端开发人员和后端开发人员比例约1:1,但是在国内比例却在1:3以下, Web前端开发职位 ...
- 利用CSS变量实现炫酷的悬浮效果
最近,我从 Grover网站 上发现以一个好玩儿的悬停动画,这个动画是将鼠标移动到订阅按钮上移动光标,会跟随光标实现相应的彩色渐变. 这个想法很简单,但是它能使这个按钮脱颖而出,人们一下子就注意到它了 ...
- 3dTiles 数据规范详解[3] 内嵌在瓦片文件中的两大数据表
转载请声明出处:全网@秋意正寒 零.本篇前言 说实话,我很纠结是先介绍瓦片的二进制数据文件结构,还是先介绍这两个重要的表.思前想后,我决定还是先介绍这两个数据表. 因为这两个表不先给读者灌输,那么介绍 ...
- CF819B Mister B and PR Shifts 题解
题目 Some time ago Mister B detected a strange signal from the space, which he started to study. After ...
- CF819B Mister B and PR Shifts 思维题
分析 这道题\(n\leq10^{6}\),显然\(n^{2}\)的暴力是无法解决问题的 那么我们可以考虑数列的某一种性质 因为最终的答案是\(\sum{n \atop i=1} |p_i - i|\ ...
- Java基础笔记05-06-07-08
五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...
- 接口测试基础——session认证和token认证
总算是把这个过程理清楚了,现在我们的思路是:what?why?How?,实际上这些个机制产生的内部逻辑是从下至上的的:遇到问题了,想办法解决,总结归纳并取名.从解决一些小问题开始生长,不断打补丁直至完 ...
- 简单讲解一下http2的多路复用
在 HTTP/1 中,每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然 ...
- Spring源码解析——核心类介绍
前言: Spring用了这么久,虽然Spring的两大核心:IOC和AOP一直在用,但是始终没有搞懂Spring内部是怎么去实现的,于是决定撸一把Spring源码,前前后后也看了有两边,很多东西看了就 ...