异常和泛型知识点总结

异常处理

异常概念

  • 异常是程序运行时发生的不正常情况,会中断正常的指令流
  • Java中所有异常都继承自Throwable类,分为ErrorException两大类

异常分类

  1. Error:严重错误,程序无法处理(如内存溢出)
  2. Exception
    • 检查异常(Checked Exception):必须处理(如IOException)
    • 非检查异常(Unchecked Exception/RuntimeException):可选择性处理(如NullPointerException)

异常处理机制

  1. try-catch-finally

    java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
    // 可能抛出异常的代码
    } catch (ExceptionType1 e) {
    // 处理特定异常
    } catch (ExceptionType2 e) {
    // 处理另一种异常
    } finally {
    // 无论是否发生异常都会执行的代码
    }
  2. throws:声明方法可能抛出的异常

    java

    1
    2
    3
    public void method() throws IOException {
    // 方法代码
    }
  3. throw:主动抛出异常

    java

    1
    throw new Exception("错误信息");

自定义异常

  • 继承Exception或RuntimeException创建自定义异常类
  • 通常提供构造方法传递错误信息

泛型

泛型概念

  • 参数化类型,将类型作为参数
  • 提高代码复用性和类型安全性

泛型使用

  1. 泛型类

    java

    1
    2
    3
    4
    5
    public class Box<T> {
    private T t;
    public void set(T t) { this.t = t; }
    public T get() { return t; }
    }
  2. 泛型方法

    java

    1
    2
    3
    4
    5
    public <T> void printArray(T[] array) {
    for (T element : array) {
    System.out.println(element);
    }
    }
  3. 泛型接口

    java

    1
    2
    3
    public interface Generator<T> {
    T next();
    }

泛型通配符

  1. 无界通配符<?> 表示未知类型
  2. 上界通配符<? extends T> 表示T或T的子类
  3. 下界通配符<? super T> 表示T或T的父类

类型擦除

  • Java泛型在编译时进行类型检查,运行时擦除类型信息
  • 编译器在必要时插入类型转换代码

泛型限制

  • 不能使用基本类型作为类型参数
  • 不能创建泛型数组
  • 不能实例化类型参数
  • 不能使用instanceof检查泛型类型