目录
异常
异常代表程序出现的问题
Exceotion:叫异常
- 运行时异常:RuntimeRxception及其子类,编译阶段不会出现错误提醒,运行时出现的异常
- 编译时异常:是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一 般性异常。编译器要求Java程序必须捕获或声明所有编译时异常。
异常的基本处理
抛出异常(throws)
在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理
方法 throws 异常1,异常2,异常3...{
...
}
捕获异常(try...catch)
直接捕获程序出现的异常
try{
//监视可能出现异常的代码
}catch(异常类型1 变量){
//处理异常
}catch(异常类型2 变量){
//处理异常
}...
异常的作用
- 异常是用来定位程序bug的关键信息
- 可以作为方法内部的一种特殊返回值以便通知上层调用者,方法的执行问题
自定义异常
自定义运行时异常
- 定义一个异常类继承RuntimeException
- 重写构造器
- 通过throw new 异常类(xxx)来创建异常对象并抛出
特点:编译阶段不报错,运行时才可能出现,提醒不属于激进型
自定义编译时异常
- 定义一个异常类继承Exception
- 重写构造器
- 通过throw new异常类(xxx)创建异常对象并抛出
特点:编译阶段就报错,提醒比较激进
异常的处理方案
底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示
try {
show();
System.out.println("成功了");
} catch (ParseException e) {
e.printStackTrace();
} catch {FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("程序结束");
最外层捕获异常后,尝试重新修复
while (true) {
try {
double price = userInputPrice();
break;
} catch (Exception e) {
System.out.println("重新输入");
}
}
泛型
定义类、接口、方法时,同时声明了一个或者多个类型变量 (如<E>)
作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力。
这样可以避免强制类型转换,及其可能出现的异常
把具体的数据类型作为参数传给类型变量
泛型类
修饰符 class 类名<类型变量,类型变量,...>{
}
public class ArrayList<E>{
...
}
类型变量建议用大写的英文字母,常用的有E,T,K,V等
泛型接口
修饰符 interface 接口名<类型变量, 类型变量,...>{
}
public interface A<E>{
}
泛型方法
修饰符<类型变量,类型变量,...> 返回值类型 方法名(形参列表){
}
public static <T> void test(T t){
}