A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第二阶段笔记异常与IO流摘要
-石家庄校区黑马JavaEE基础6期

异常体系&异常处理
异常概述:  本身是一种安全机制
  • 不正常,我们在代码的时候出现的编译或运行时的错误, 包含了错误的类型/原因以及位置
  • 常见异常:
    • NullPointerException   空指针
    • ArrayIndexOutOfBourbonException   索引越界
  • 异常体系结构
    • Throwable (所有异常的超类)
      • Error 出现的不能够处理的严重问题, Throwable的子类
      • Exception  出现的可以处理的问题, Throwable的子类  编译时异常
        • RuntimeExecption    运行时异常
  • 异常处理方式
    • jvm处理异常方式
      • 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因,位置显示在控制台,并且终止程序,异常后面的代码就不执行了
    • 自己处理
      • 捕获处理
        • try...catch语句
          • try {   
有可能出现问题的代码
} catch (异常对象  对象名, 如果有异常,怎创建这个对象名的对象) {       
处理异常
}
2.try...catch...finally  语句


file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/d6945245967b44a6893b4ab70659853d/clipboard.png
标准IO流代码写法
        FileWriter fileWriter = null;
                try {
                        fileWriter = new FileWriter("a.txt");
                        fileWriter.write("java");
                        fileWriter.write("world");
                        System.out.println(2/0);
                        fileWriter.write("hellow");
                       
                } catch (Exception e) {
                        e.printStackTrace();
                }finally {
                        try {
                                if(fileWriter!=null)
                                fileWriter.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }


  • try ... catch语句的执行顺序
    • 首先执行try语句
    • 如果发现异常,异常下面的代码就不执行,直接跳入catch语句,catch语句结束后,整个try...catch结束
    • 如果没有异常,catch不再执行

    • 抛出去处理 throws  异常类型
      • 定义位置  方法形参后,如果跑出多个异常,可以用逗号分隔
      • 作用: 不捕获异常,当发生异常时向方法外界跑出,直到最顶层的方法,最终终止程序
      • 使用场景:  一般在该方法不能处理异常,或希望外界处理异常时使用
      • 注意: 定义在方法上的抛出异常属于"编译时异常"  , 编写代码调用该方法时, IDE会提示去处理异常
  • 多个异常处理方式
    • 可以使用多个try...catch语句
    • 可以使用一个try,多个catch
      • 多个catch之间的执行顺序
        • 异常对象可以有子父类关系
        • 平级之间没有顺序要求,如果有子父类,父类必须得放到最后的catch语句里


Throwable的常用方法
  • String  getMessage()  
返回此 throwable 的详细消息字符串。

  • String toString
返回此 throwable 的简短描述

  • void privatStackTrace()


提供编程访问由 printStackTrace()
输出的堆栈跟踪信息。

异常分类
  • 编译时期异常,编译时就发出异常
    • Exception 及其子类
    • 处理方式, 编译时期必须去处理
  • 运行时异常: 编译时正确, 但运行时发生的异常
RuntimeException类及其子类处理方式: 编译时期可以自由选择处理或不处理
自定义异常
  • 自定义编译异常类
    • 定义一个类, 继承Exception或其子类(非RuntimeException), 重写构造方法
  • 自定义运行异常类
    • 定义一个类,继承RuntimeException或其子类, 重写构造方法
  • 使用异常类的方式
    • 使用编译时异常的时
      • 必须用throws在方法声明上跑出Exception及其子类类型
    • 使用运行异常时
      • 在方法代码中, 用throw跑出RuntimeException或其子类的对象
  • throws和throw的区别:
throws: 用于抛出编译时异常, 在方法声明上使用
throw: 用于主动抛出运行时异常, 在方法中使用
递归
  • 指在当前方法内调用自己的这种现象
    • 递归注意事项:
      • 一定要有出口,否则会内存溢出异常  StakeOverFlowError
      • 递归次数不宜过多, 否则会内存溢出异常
    •       举例:
file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/af9e0e8143c84c53a064eeaa4c0e64fa/clipboard.png
file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/af9e0e8143c84c53a064eeaa4c0e64fa/clipboard.png

public void show(int n) {
      //出口
      if(n == 0) {
         return;
   }
     show(n-1) ;
}
----------------------------------------------------------------------------------




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马