异常

异常

概念

指的是程序执行过程中,出现的非正常的情况,最终导致JVM的非正常停止。
在Java等面向对象的编程语言中,异常本身就是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式就是中断处理。

异常体系

异常机制其实就是帮助我们找到程序中的问题,异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Error与java.lang.Exception,平常所说的异常指java.lang.Exception。

Throwable体系:

  1. Error: 严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
  2. Exception: 表示异常,异常产生后程序员可以通过代码的方式纠正,是程序继续运行,是必需要处理的。好比感冒。、

Throwable中的常用方法:
public void printStackTrace():打印异常的详细信息
public String getMessage():获取发生异常的原因。提示给用户的时候,就提示错误信息
public String toString():获取异常的类型和异常描述信息。

异常的分类:根据在编译时期还是运行去检查异常
编程时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败
运行时期异常:runtime异常。在运行时期,检查异常,在编译时期,运行异常不会被编译器检测。

异常的处理

Java异常处理的五个关键字:

  • try:该代码块中编写可能出现异常的代码
  • catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理
  • finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码是一定会被执行的。
  • throw:抛出异常
  • throws:声明异常

异常注意事项

多个异常使用捕获又该如何处理?

  • 多个异常分别处理
  • 多个异常一次捕获,多次处理
  • 多个异常一次捕获,一次处理

一般我们是使用一次捕获多次处理方式,格式如下

try{
	编写可能出现异常的代码
}catch(异常类型A e){
	处理异常的代码
}catch(异常类型B e){
	处理异常的代码
}

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch进行处理

  • 运行时异常抛出可以不处理。即不捕获也不声明抛出
  • 如果finally有return语句,永远返回finally中的结果,避免该情况
  • 如果父类抛出了多个异常,子类重写父类的方法时,抛出和父类相同的异常或者父类异常的子类或者不抛出异常
  • 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出。

自定义异常

在开发中根据自己业务的异常情况来定义异常类

异常如何定义:

  1. 自定义一个编译器异常:自定义类并继承于java.lang.Exception
  2. 自定义一个运行时期的异常类:自定义类并继承于java.lang.RuntimeException
package com.review;

public class MyExceptionDemo {

    //模拟数据库中已存在账号
    private static String [] names={"bill","hill","jill"};


    public static void main(String[] args) {
        //调用方法
        try{
            checkUsername("jill");
            System.out.println("注册成功");
        } catch (RegisterException e) {
            //处理异常
            e.printStackTrace();
        }
    }

    private static boolean checkUsername(String uname) throws RegisterException {
        for (String name:names){
            if (name.equals(uname)){
                throw new RegisterException();
            }
        }
        return true;
    }
}

class RegisterException extends Exception{

    public RegisterException(){

    }

    public RegisterException(String message){
        super(message);
    }
}



你可能感兴趣的:(JavaSE复习)