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 ...
随机推荐
- python文件处理-检查文件名/路径是否正确
内容涉及:检查路径是否存在,文件名长度是否一直,将重复的文件夹重命名 # -*- coding: utf-8 -*- import os import sys import numpy as np i ...
- Python实用笔记 (5)使用dictionary和set
dictionary 通过键值存储,具有极快的查找速度,但占用空间比list大很多 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Micha ...
- Python实用笔记 (10)高级特性——生成器
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...
- jquery入门(2)
3.jQuery常用方法 3.1 dom属性相关方法 addClass() 为每个匹配的元素添加指定的样式名 $('div').addClass('box'); //为页面中所有的div添加一个box ...
- EFCore-一对一配置外键小记2
前后两次遇到这样的错误: The property 'xx' on entity type 'xxxx' has a temporary value. Either set a permanent v ...
- 04 . kubernetes资源清单YAML入门
YAML 通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船 yam是专门用来写配置文件的语言,非常简洁和强大.而实际上使用yaml配置文件创建 ...
- springboot 整合retry(重试机制)
当我们调用一个接口可能由于网络等原因造成第一次失败,再去尝试就成功了,这就是重试机制,spring支持重试机制,并且在Spring Cloud中可以与Hystaix结合使用,可以避免访问到已经不正常的 ...
- Linux 安装Anaconda/Miniconda以后无法识别conda命令
注意:遇到无法识别conda命令时,可以先用步骤3试一下重启环境变量后conda命令是否能够识别 1. 修改环境变量 $ vim ~/.bashrc 2. 在最后添加: $ export PATH=~ ...
- [译]高性能缓存库Caffeine介绍及实践
概览 本文我们将介绍Caffeine-一个Java高性能缓存库.缓存和Map之间的一个根本区别是缓存会将储存的元素逐出.逐出策略决定了在什么时间应该删除哪些对象,逐出策略直接影响缓存的命中率,这是缓存 ...
- 原生开发、H5开发、混合移动开发的优缺点
一.原生开发(Native App开发) 原生开发,是在Android.IOS等移动平台上利用官方提供的开发语言.开发类库.开发工具进行App开发.比如Android是利用Java.Eclipse.A ...