内置异常和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 异常处理专题,从入门到精通的更多相关文章

  1. Java并发编程从入门到精通 张振华.Jack --我的书

    [当当.京东.天猫.亚马逊.新华书店等均有销售] 目 录 第一部分:线程并发基础 第1章 概念部分   1 1.1 CPU核心数.线程数 (主流cpu.线程数的大体情况说一下) 1 1.2 CPU时间 ...

  2. Java网络编程从入门到精通(27):关闭服务端连接

    在客户端和服务端的数据交互完成后,一般需要关闭网络连接.对于服务端来说,需要关闭Socket和ServerSocket. 在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说 ...

  3. 《java从入门到精通》学习记录

    目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...

  4. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

  5. 真正的Java学习从入门到精通

    http://www.it.com.cn/f/edu/059/6/169189.htm 一. 工具篇JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行 ...

  6. 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

    以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...

  7. 学java入门到精通,不得不看的15本书

    学java入门到精通,不得不看的15本书 一.Java编程入门类1.<Java编程思想>2.<Agile Java>中文版 二.Java编程进阶类1.<重构 改善既有代码 ...

  8. Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步

    Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述     PV操作是对信号量进行的操作.     进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...

  9. 《Java从入门到精通》src0-8

    public class HelloWorld { public static void main(String[] args) { System.out.println("Hello wo ...

随机推荐

  1. keras训练函数fit和fit_generator对比,图像生成器ImageDataGenerator数据增强

    1. [深度学习] Keras 如何使用fit和fit_generator https://blog.csdn.net/zwqjoy/article/details/88356094 ps:解决样本数 ...

  2. 发家致富的鬼bug。让人心动

    这个bug是我目前见过最离谱的bug…… 颠覆了我二十多年的世界观,天上掉馅饼这种好事第一次砸我身上(雾),至今我都没想明白其中的原理. 情况是这样的,去年我出门去外地有些事情要处理.由于要呆很长时间 ...

  3. 如何在Mac中配置Python虚拟环境,踩了好多坑

    如何在Mac中配置Python虚拟环境 1.安装virtualenv pip3 install virtualenv 2.安装virtualenvwrapper pip3 install virtua ...

  4. 【2003、2004 NOIp 入门组错题报告】

    2003: T4: 题目大意:  讲这么多话,其实就是求比当前序列大的序列中第m小的一个.可以每次找出比当前序列大的最小的一个序列.我们可以从后往前扫描,当当前这个数比后一个数小时,我们把它与它后面的 ...

  5. SpringMvc流程分析,简单源码分析

    SpringMvc的请求入口:web.xml中的DispatcherServlet <servlet> <servlet-name>springServlet</serv ...

  6. TJOI2018 数学计算 题解

    题目 小豆现在有一个数 \(x\) ,初始值为 \(1\) . 小豆有 \(Q\) 次操作,操作有两种类型: \(m\): \(x=x×m\),输出 \(x\mod M\) : \(pos\): \( ...

  7. P2607[ZJOI2008] 骑士 题解

    题目 Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 Y 国发动了一场针对 Z 国的侵略战争.战火绵延五 ...

  8. plus.runtime.quit()是个好函数

    对于H5+APP开发,应用的生命周期监听函数里是对应用行为的监控,但是并不对应用执行退出或重启操作.相关操作还是要使用mui

  9. 简单的SQL语句学习

    CREATE DATABASE db_test; USE db_test; CREATE TABLE USER( uid INT PRIMARY KEY AUTO_INCREMENT, usernam ...

  10. Pop!_OS配置Python环境

    Pop!_OS配置Python环境 #0x0 安装vscode #0x1 配置vscode #0x0 安装vscode 见vscode安装 #0x1 配置vscode 安装Python插件 安装pyl ...