Java基础 - 异常机制

8.异常机制

Throwable

所有异常或者错误的父类

常用方法

public void printStackTrace();打印异常的详细信息

public String getMessage();获取发生异常的原因

Error

表示错误,错误产生后程序员不能通过代码的方式纠正,只能事先避免,好比绝症。

Exception

  • 概述

    表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的

  • 单个异常

    语法:

      try {
         可能出现异常的代码
      } catch (异常的类型  变量名) {
          处理异常的方案
      }
    

    注意:

      try中已经执行的代码是有效的,仅仅发生异常后的代码不执行,拿异常对象去匹配catch
    
      如果匹配成功则进入catch里进行处理,不能匹配则往上抛给JVM
    
  • 多个异常

    1. 如果你的代码是需要细致化处理多个异常,必须要写多个catch,对每一个异常都专业处理

    2. 如果仅仅需要粗略处理,可以直接使用一个catch块,这个catch可以使用Exception

  • finally

    无论是否有异常,最终都会执行finally代码块,目的是为了释放资源

    语法有两种:

      try-finally     不会对异常进行处理,会执行finally
    
      try-catch-finally       可能处理异常异常,会执行finally
    
  • 异常的抛出

    • throw

      作用:方法中的细节出现问题,在方法内部抛出异常对象,告诉方法调用者

      语法: throw new Execption("xx出现异常");

    • throws

      作用: 在方法上声明可能抛出的异常,告诉方法调用者去处理

      语法: throws 异常类型1, 异常类型2...

    • 方法重写的异常原则

      子类方法抛出的异常要比父类方法抛出的异常小或者相等,不能抛出新的异常

  • 异常的类别

    • 运行时期异常

      1. RuntimeExeption类和RuntimeException的子类.

      2. 可处理,可不处理. 可不处理指的是可以不用try-catch/throws,也能编译通过

    • 编译时期异常

      1. Exception及Exception子类中除了RuntimeExeption类的类

      2. 要求我们必须处理异常(throws/try-catch),不处理,则编译不能通过.

  • 异常的转型

    目的

    1. 编译时期异常转运行时期异常

    2. 保持异常信息的传递

       try{
      
           ...
      
       }catch(Exception e){
           //转成运行时期异常
           throw new RuntimeException(e);
       }
      
  • 自定义异常

    • 使用背景

      我们开发中,有许多我们不可意料的异常发生,此时系统提供给我们的异常将不能满足开发的需求,就要自定义异常

    • 示例代码

        //JDK中没有异常可以描述账号已存在,所以需要自定义异常
        public class RegistException extends RuntimeException {
      
            //用于提供异常信息
            public RegistException(String message) {
                super(message);
            }
        
            //用于异常转型
            public RegistException(Throwable cause) {
                super(cause);
            }
        }
      
        public static void testException(String name){
            if ("admin".equals(name)){
                throw  new RegistException("账户名字已存在");
            }
        }

你可能感兴趣的:(Java基础 - 异常机制)