Java基础之异常
一、异常的继承关系:
Error:严重错误
Exception:编译异常,受检异常
|– RuntimeException:运行异常,非受检异常
二、编译异常及运行异常:
(1)编译异常:
1. 写上之后有红线
2. 要么try-catch处理
3. 要么throws甩锅
(2)运行异常:写上之后没有红线
1. 也可以try-catch处理
2. 也可以throws甩锅
3. 还可以不理它,默认也会throws甩锅
三、异常处理方式:
(1)throw关键字:
含义:主动抛出一个异常,搞事情。
格式:throw new 异常类(参数);
异常类 异常对象名 = new 异常类(参数);
throw 异常对象名;
(2)throws关键字:
含义:是一种修饰,代表本方法中出现了异常我不管,谁调用我谁管。
格式:修饰符 返回值类型 方法名称(参数类型 参数名称) throws 异常A, 异常B {…}
注:
1. 如果方法当中可能有多种异常,那么throws后面可以都写上,用逗号分隔。
2. 如果throws后面多个异常之间存在继承关系,那么只要写父类异常即可。但是都写上,也不算错。
3. 无论是编译异常还是运行异常,都可以写在throws后面。只是一般情况下运行异常不写也可以。
(3)try-catch语句:
try {
} catch (A a) {
}
try-catch-finally语句:
try {
} catch (A a) {
} finally {
// 一定会被执行的语句
}
注:
1. 可以一个try后面多个catch语句,但是如果有继承,必须子类异常在前,父类异常在后。
try {
} catch (A a) {
} catch (B b) {
}
2. 也可以一个catch语句中间多种异常,但是互相之间不能存在继承关系。
try {
} catch (A | B | C ex) {
}
3. 可以是try-catch,也可以try-catch-finally,还可以try-finally。但是不能只有try或者没有try。
4. 覆盖重写方法的时候,必须保证子类方法的throws异常范围***【小于等于】***父类范围。
四、java,lang.Throwable里三个常用方法:
public String getMessage():获取异常的“详细”(细节)信息。
public String toString():获取异常的“简短”(概要)信息。
public void printStackTrace():打印异常栈信息(异常的位置信息)。
注:决不允许捕获了异常之后什么都不做,吞掉异常。
如何选择是try-catch呢,还是throws呢?
作为一个方法的编写者,我们要看当前方法一旦发生异常,还有没有必要继续运行下去?
(1)如果有了异常,方法还应该继续向下执行,那么就应该用try-catch。
(2)如果有了异常,方法就不应该继续了,应该中断崩溃,那么就应该使用throws。
五、自定义异常
- 定义一个类,并且继承一个已经存在的异常类。(认贼作父)
- 编写一个无参数的构造方法。
- 编写一个String参数的构造方法,并且调用super(String)
- 然后就可以当做普通的异常来用,抛出throw,甩锅throws,处理try-catch都可以。
推荐阅读
-
Java基础之异常
-
Java 基础篇学习 集合框架List与Set
-
java基础 二维数组 推箱子小游戏
-
java之Mybatis分页插件
-
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx 类型转换异常
-
Java基础之垃圾回收机制(第一篇:性能监控与分析工具介绍)
-
数据库基础学习之sql数据类型
-
Java基础知识(JDK、JRE、JVM; 编写java小程序之文件命名、编译javac、运行java)
-
java设计模式之单例设计模式——-反射攻击解决方案及原理分析
-
基础页面布局之div+css_html/css_WEB-ITnose