JAVASE——异常、泛型

目录

异常

异常的基本处理

异常的作用

自定义异常

异常的处理方案

泛型

泛型类

泛型接口

泛型方法


异常

异常代表程序出现的问题

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){

}