16 Java中异常的处理

Posted gavin520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16 Java中异常的处理相关的知识,希望对你有一定的参考价值。

JavaSE 基础之十六

16 Java中异常的处理

① 异常的概念及分类

1. 异常的概念

  1. 异常指的是在运行期间出现的错误。(程序开始执行,在执行期内出现的问题。出现异常后要关注异常的类型以及异常出现的行号)
  2. 在Java中,Java的异常是Java提供的用于处理程序错误的一种机制。
  3. 异常处理机制:一旦异常发生以后,使用异常处理机制让程序不会直接中断或者影响虚拟机运行。

2.异常的分类

  1. 根基类:Throwable
  2. 子类:Exception、Error
  3. Exception:
    • 用户的错误。或者程序无法预见的一些问题。所有异常的父类。很多的子类,提供了很多的子类,每一种子类都对应到异常情况。
    • 一旦出现Exception这种异常,需要开发者自己去处理(捕获)。
  4. Error:
    • 称为错误(不是异常)。JVM生成并抛出,虚拟机错误、动态链接失败之类的等等。
    • 程序控制不了,用户也无法控制。JVM的运行环境问题。

② 异常的结构体系

  1. Throwable:所有异常的根基类,也可以抛出
    1. Exception:表示异常,开发过程中可以进行处理
      • 检查异常:编译器要求必须处理的异常,不处理程序无法运行。当代码没有运行的时候,编译器就检查出来的问题。
      • 非检查异常:编译器不强制要求处理的异常。虽然在运行中有可能出问题,但是不要求进行处理。
    2. Error:表示错误,开发过程程序无法控制和处理
  2. 捕获异常的语法

    语法1:
    try{
    	// 运行过程中要执行的逻辑代码
    	// 这段代码可能会出现问题,捕获异常
    
    }catch( Exception e){    // 声明一个父类异常,接受任何一个异常
    
    // 提示当前系统出现了什么样的异常
    
    }
    
    语法2:
    try{
    
    }catch(  ){    
    
    }catch(  ){   
    
    }catch(  ){    
    
    }
    
    语法3:
    try{
    
    }catch(  ){    
    
    }finally{   
    
    }
    // 为异常提供了一个统一的出口,使得当前程序在跳转到另外程序的流程之前,能够对程序进行统一的管理。
    // 无论try模块中的内容是否执行,finally代码都执行一次。
    // finally里边通常执行的内容是资源的关闭或者日志的记录。
    
    语法4:
    try{
    
    }finally{   
    
    }
    
    // 对于某些“可疑代码”在操作的时候直接try起来,异常不需要管。
    

③ 异常的使用

1. 异常的执行流程

  方法栈:方法在调用的过程中,先执行的方法后退出。
  在方法执行中,方法压入到方法栈中,在某一个方法中出现了运行时异常,没有处理这种异常,后边方法的内容将无法执行,异常抛给了虚拟机,中断了虚拟机继续运行。

2. 申明并抛出异常

  在本方法中,如果出现了异常,本方法可以不进行处理,抛给调用者处理,将异常一层一层的往外抛,在达到虚拟机之前处理好,整个程序运行流程也不受影响。
  throw:将异常进行抛出(动作)
  throws:声明将要抛出何种类型的异常(声明)

重写方法时候,子类与父类异常问题:
  1. 父类方法没有抛出异常,而子类重写方法抛出了异常,不允许,编译不通过。
  2. 父类抛出了异常,子类重写方法抛出与父类同样的异常,没有问题。
  3. 父类抛出了异常,子类重写方法不抛出异常,编译器能通过,但是不推荐这样写。
  4. 父类抛出一个Exception,子类可以抛出比Exception小的异常,子类不能不父类大。
  5. 父类抛出比子类小的异常,不行,编译报错。
  6. 父类抛出一个Exception,子类抛出多个子异常。编译通过。
总结:子类重写方法抛出的异常,要么与父类一样,要么比父类小。

3. 自定义异常

  1. 好处:在团队开发过程中,都是分模块、分功能来进行开发的,在项目中统一制定自己的异常,对外统一显示内容。
  2. 作用:
    1. 在用户发请求进行数据验证的时候,如果数据验证失败,自己抛出自定义异常。
    2. 在开发过程中,遇到某些逻辑上的问题,判断性别出现中性的时候。java没有提供性别中性异常,自定义。
    3. 系统提供的异常,如果直接给用户,体验不是特别好,包括异常的信息、代码。代码中能抛出去的异常,用户处理过的异常。
  3. 要求:
    1. 不管是自定义异常还是系统提供的异常,都必须是Throwable的子类。
    2. 写一个检查性异常,需要写一个类来继承Exception。
    3. 写一个运行时异常,需要写一个类来继承RuntimeException。

以上是关于16 Java中异常的处理的主要内容,如果未能解决你的问题,请参考以下文章

java 反射代码片段

Java入门提高篇Day16 Java异常处理(上)

16 Java中异常的处理

异常和TCP通讯

java异常和异常体系

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段