异常的处理

1、异常概述
  异常:指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致jvm
的非正常停止。
2、异常体系
  异常的根类是Java.lang.Throwable,其下有俩个子类:java.lang.Exception和java.lang.
Error。其中Error是严重错误,无法通过处理的错误,只能事先避免,如StackOverflowError和OutOfMemoryError.
而Exception表示异常,其它因编程错误或 偶然的外在因素导致的一般性问题,程序员可以通过代码的方式纠正
使代码继续运行,是必须处理的。如空指针异常、试图读取不存在文件、网络连接终断,数据下标越界。
  Throwable中常用的方法:
    public void printStackTrace():打印异常的详细信息。
(包括异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrac)
    public String getMessage():获取发生异常的原因。提示给用户的时候,就显示是错误原因。
3.异常的分类
   Exception:所有可编辑异常的父类
  编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如文件找不到异常)
  运行时期的异常:runtime异常。在运行时期,检查异常。在编译时期,运行异常不会被编译器检测到
(不报错)。如数组的索引越界,类型转换异常。程序员应该积极避免其出现的异常,而不是使用try..catch处理,因为
这类异常都很普遍,若都是使用try..catch或throws处理可能会对程序的可读性和运行效率产生影响。
4.常见的错误和异常
  StackOverflowError:方法栈满了
  OutOfMemoryError:定义数值过大;
  NullPointerException:空指针异常;
  ClassCastException:数组类型异常
  ArrayIndexOutOfBoundsException:数组越界
  InputMismatchException:输入类型错误
5.异常抛出机制
  层层递进,先抛出给调用方法的点,然后在抛给调用点。。。。。,最后抛给main()方法,然后main()抛给
java虚拟机,进程终止。
6.异常的使用
  异常处理的关键字:try,catch,finally,throw,throws
  tyr{
  可能出现异常的代码块
  }catch(捕捉异常的类型){
  执行异常的代码
  }catch(){
  }finally{
  无论try中是否发生异常,也无论catch是否捕获异常,
也不管try和catch中是否有return语句,都一定会执行
(一般用作资源回收)
  }


  throw程序员手动抛出异常,如果是check的异常,需要在方法声明时,声明该异常类
关键字**throws**运用于方法声明之上,   
用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
7.自定义异常
  **异常类如何定义:**
  1. 自定义一个编译期异常: 自定义类 并继承于`java.lang.Exception`。
  2. 自定义一个运行时期的异常类:自定义类 并继承于`java.lang.RuntimeException`。
  重写message方法,提示错误信息;
结论:1.从Exception类或者它的子类派生一个 子类即可
        2.习惯上,自定义异常类应该包含2个构造器:一个是无参构造,另一个是带有详细信息的构造器
        3.自定义的异常只能通过throw抛出
        4.自定义异常最重要的是异常类的名字,根据名字可以判断异常类型

posted @ 2021-11-10 19:10  Just&Walking  阅读(42)  评论(0编辑  收藏  举报