#异常处理

什么是异常处理
  • 异常是指程序在运行过程中发生的非正常情况,当程序违反java语言的语义约束时,java虚拟机会将此错误作为异常信号传递给程序
异常体系
  • java语言的错误和异常都是Throwable类的子类或其子类的表示,只有作为此类(或其子类)实例的对象由java虚拟机抛出
  • Throwable 类的的两个派生类
    • Errow类:表示程序无法恢复的严重的错误或恢复起来比较麻烦的错误。eg:内存溢出、动态链接失败
    • Exception类:由java程序抛出和处理的非严重错误
异常分类
  • 不受检查异常(uncheckedException):包括RuntimeException及其所有子类对这类异常不要求强制处理
  • 检查时异常也称设计时异常(checkedException):值除了不受检查异常外所有继承自Exception的异常,这类异常要求在代码中显示处理
异常类名异常分类说名
Exception设计时异常异常层次结构的根类
IOException设计时异常IO异常的根类,属于非运行时异常
FileNotFoundException设计时异常文件操作时,找不到文件
RuntimeException运行时异常运行时异常的根类,不要求必须处理
ArithmeticException运行时异常算数异常的根类,比如除数为0
IllegalArgumentException运行时异常方法接收到非法参数
ArrayIndexOutOfBoundException运行时异常数组越界访问
NullPointerException运行时异常尝试访问null对象时发生的空指针异常
ArrayStoreException运行时异常数组元素类型不匹配
ClassCastException运行时异常类型转换异常
IllegalThreadStateException运行时异常试图非法改变线程状态
NumberFormatException运行时异常数据格式异常
异常处理关键字
  • throw throws(在方法名后面使用)
    • throw:关键字用于手动抛出异常
    • throws:关键字在方法名之后使用,在方法申明指定可能抛出的异常
      例如:
class kiana {
 public static void main(String[] args) {
   int[] arr = queues();
   arr[11] = 100;
   //输出Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 10
 }

 public static int[] queues() throws ArrayIndexOutOfBoundsException {
   return new int[10];
 }
}
  • try,catch,finally
    • try语句块中包含了可能产生异常的代码块只能包含一个,必须出现
    • catch语句可以包含多个进行异常处理可以没有
    • finally语句块存在时必须执行
      例如:
class kiana {
  public static void main(String[] args) {
    int num = queues();
    System.out.println(num);
  }

  public static int queues() {
    try {
      int s = 5 / 0;
      System.out.println(s);
      return 1;
    } catch (ArithmeticException ex) {
      System.out.println("qq");
      return 0;
    } finally {
      System.out.println("hh");
      return -1;
    }
  }
}
//输出是qq
//    hh
//    -1

由这段代码可以看出只要存在finally语句在执行完代码之前一定会执行该语句块中的语句
每一个异常都是一个类,在catch语句中的异常类后面的就是他的对象

异常可以在构造方法中使用吗?
答案:可以,不过在构造方法中抛出异常时,如果类型为uncheckedException不受检查异常时,其在子类中构造中不必申明该异常类型
如果如checkedException受检查异常则,必须要在子类中申明该异常的类型,可以扩大。

目前就这么多,持续更新…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值