java开发的第十个博客(异常)

1.异常的介绍

  1. 概念
  • 程序在执行( 编译和运行)过程中,出现的非正常的情况,最终会导致JVM的中断
  1. 异常体系
  • 异常的根类为Throwable,其下有两个子类
  • Error:系统错误,无法处理,需要事先避免
  • Exception:程序异常,可以修正
  1. Throwable的常用方法
  • public void printStackTrace():打印异常的详细信息
  1. 异常分类
    编译期异常
    运行期异常

  2. JVM自动处理异常

  • 程序出现异常时,会将异常的名称、内容和产生位置直接封装到异常对象中
  • main方法接收到了异常对象并抛给JVM
  • JVM收到异常后,用这个异常对象调用printStackTrace()方法并抛给main方法和终止程序

2.异常的处理

1. throw

  • 抛出一个指定异常对象(throw new 异常类名(参数) )
  • 一般在进行指定条件判断后抛出一个指定异常对象
  • 在方法体内使用

2. throws

  • 将异常类型返回给调用者,不直接处理异常(抛出)
  • 抛出多个异常时以逗号分隔,并且要求子类异常要在父类异常前面
  • 所有调用者都throws抛出异常,会最终交给JVM处理(中断),不会执行后续代码
  • 在方法声明上使用

3. try…catch
对异常语句进行捕获,对出现的异常进行指定方式的处理(try-catch不能单独使用)
try:代码块存放可能产生异常的代码。
catch:进行异常的捕获并进行处理

4. try…catch对于多个异常的多种处理
1.一个异常一次处理(多try多catch)

  • 对于每个异常语句分别try…catch处理
 try {
     
       method();//FileNotFoundException是IOException子类,儿子
     } catch(FileNotFoundException e) {
     //e = 异常对象;
         e.printStackTrace();
     }
 try {
     
        method2();//ClassNotFoundException
     } catch(ClassNotFoundException e) {
     
         e.printStackTrace();
     } 
 try {
     
        method3();//IOException
     } catch(IOException e) {
     
        e.printStackTrace();
     }

2.多个异常分别处理(单try…多catch)
当try里面的代码出现异常时,会逐个找可以捕获该异常的异常类

try {
     
       method();//FileNotFoundException是IOException子类,儿子
       method2();//ClassNotFoundException
       method3();//IOException
     } catch(FileNotFoundException e) {
     //e = 异常对象;
        e.printStackTrace();
     } catch(ClassNotFoundException e) {
     
        e.printStackTrace();
     } catch(IOException e) {
     
        e.printStackTrace();
     }

3.多个异常一次捕获,多次处理(细化,推荐使用)(jdk1.7)

try {
     
      method();
      method2();
      method3();
    } catch(  ClassNotFoundException | IOException e) {
     
      e.printStackTrace();//一次处理
    }

注意:上面写法要求多个异常类型只能是平级关系,不能是子父类,否则父类接收子类异常
改进:(FileNotFoundException是IOException的子类)

try {
     
      method();
      method2();
      method3();
    } catch(  ClassNotFoundException | FileNotFoundException e) {
     
      e.printStackTrace();//一次处理
    } catch(IOException e){
     
      e.printStackTrace();
    }

4.多个异常一次捕获,一次处理(笼统)(jdk1.7)

try {
     
      method();
      method2();
      method3();
     } catch(Exception e) {
     
      e.printStackTrace();
     }

5.finally
跟try或者try…catch组合用的,不能单独使用,这里面的代码永远都会执行,除非你在它之前退出Java虚拟机

try {
     
      read("a.txt");
    } catch (FileNotFoundException e) {
     
            //抓取到的是编译期异常  抛出去的是运行期 
      throw new RuntimeException(e);
    } finally {
     
        System.out.println("不管程序怎样,这里都将会被执行。");
    }

6.异常注意事项

  • 运行时异常可以处理也可以不处理
  • 如果父类抛出了多个异常,子类重写父类方法时,只能抛出相同的异常或者是他的子集
  • 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。
    此时子类产生该异常,只能捕获处理,不能声明抛出
  • 当多异常处理时,捕获处理,前边的类不能是后边类的父类
  • 在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收
  • 如果finally有return语句,永远返回finally中的结果,避免该情况

7.自定义异常

  • 概念
    定义自己的异常类来满足具体多样的需求
  • 如何使用
    定义一个异常类继承Exception或RuntimeException
    通过throw new 异常类(…)抛出自定义异常

8.常见异常
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组越界异常
FileNotFoundException:文件路径不存在异常

你可能感兴趣的:(java,编程语言)