文章目录
- 异常
- 介绍
- 存在形式
- 程序中异常发生后的第一反应
- 体系
- JVM的默认处理方案
- 处理方式
- 声明 throws
- 概述
- 格式
- 抛出 throw
- 格式
- 注意
- 意义
- throws和throw的区别
- 捕获 try,catch
- 介绍
- 格式
- 执行方式
- 多异常捕获处理
- 意义
- 如何选择用哪个
- Throwable类
- 介绍
- 常用方法
- 自定义异常
- 概述
- 实现步骤
- 范例
- 意义
- Lambda表达式
- 作用
- 前提
- 函数式接口
- 特点
- 语法
- 省略模式
- 和匿名对象类的区别
异常
介绍
程序出现了不正常的情况。
程序在执行的过程中,数据导致程序不正常,最终会导致JVM的非正常停止
存在形式
Java中提供的类的对象
程序中异常发生后的第一反应
中断向下执行
体系
- 编译时异常(受检异常):程序在编译的时候可能出现的异常,编译时期必须处理,否则程序无法执行
- 运行时异常(非受检异常):程序在运行时可能出现的异常
JVM的默认处理方案
- 把异常的类型,原因,位置打印在控制台
- 程序停止执行
注意:程序中出现了异常,会在当前位置创建此异常的对象,对象中包含了异常的信息,并把此异常交给本方法的调用者处理
处理方式
声明 throws
概述
遇到异常,自己不处理,交给别人处理
格式
//在使用声明的方式处理异常,声明是书写在方法定义上
修饰符 返回值类型 方法名(参数类型 参数1,...)throws 异常类{
}
抛出 throw
格式
修饰符 返回值类型 方法名(参数列表){
throw new 异常类名();
}
注意
- 抛出异常的格式必须在方法的内部完成
- 抛出异常下面的代码无法执行
意义
- 在方法中,当方法传递的参数有误,没有运行下去的意义,则采取抛出处理,表示该方法结束运行
- 告诉调用者方法中出现了问题
throws和throw的区别
捕获 try,catch
介绍
在本方法内部处理,自己处理
格式
try{
//存放可能出现异常的代码
1.代码...
2.代码...
3.代码...
}catch(异常类型 变量名){
4.处理异常方案
}
5.其他代码..
执行方式
上面格式中try中没有发生异常:1235
上面格式中代码2发生异常:145
多异常捕获处理
意义
阻止异常传递,让程序可以继续往下执行
如何选择用哪个
- 声明:自定义方法
- 方法体内代码比较清爽
- 把异常统一抛出到main方法中,进行统一的处理
- 捕获:
- main方法中只能使用捕获
- 父类型中的方法不支持throws,在子类重写方法时,重写的方法只能用:捕获
public class ExceptionDemo4 extends Thread {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Throwable类
介绍
异常的顶层父类
- 子类:Error类(错误类) //异常梳理无法解决错误
- 子类:Exception(异常类) //可以使用异常处理解决
常用方法
自定义异常
概述
JDK中的异常类型不满足实际的业务需求时,程序自己编写的异常类
实现步骤
- 定义异常类
- 写继承关系
- 如果自定义编译时异常,就继承Exception
- 如果自定义运行时异常,就继承RuntimeException
- 空参构造
- 带参构造
范例
//编译时异常
public class 自定义异常类 extends Exception {
public OurException() {
}
public OurException(String message) {
super(message);
}
}
//运行时异常
public class 自定义异常类 extends RuntimeException{
}
意义
让程序的报错更加的见名知意
Lambda表达式
作用
简化程序中匿名内部类代码的书写
前提
只针对函数式接口进行代码编写
函数式接口
特点
接口中仅有一个抽象方法(允许有静态方法,默认方法,私有方法)
@FunctionalInterface //Java对函数式接口制定的注解
public interface Comparator<T> {
...
}
语法
(参数,...)->{
//方法体代码(要做什么事情)
}
- ():代表一个方法,里面的参数为方法的参数
- ->:指向要做的事情
- {}:功能代码(具体要做的事情)
省略模式
- 可以省略参数类型:要么全都省略,要么全都保留
- 如果参数仅有一个时,可以省略小括号
- 如果代码块中仅有一行代码时,可以省略:大括号,分号,return