欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习笔记之异常

程序员文章站 2022-06-23 10:49:34
...

一、异常处理的重要性

在程序运行时,如果抛出异常,则会导致程序死亡;

越是大型的项目,尽管它会出现异常,但为了不影响使用,是不会在中途停下来的,如果停下来会影响很多人的使用;

而异常的出现往往是不经意之间的,例如:对于用户传入的数值范围的判断失误,就容易让程序出现错误;

所以异常处理是非常重要的一环,如果处理的不好,很有可能会导致服务器崩溃,宕机,损失严重;

二、异常概述

1.什么是异常

程序在编译或运行过程中出现的问题,被称为异常

2.现实生活中的异常举例

Java学习笔记之异常

Error:程序直接死亡

编译时异常:必须处理

运行时异常:可以不处理

3.异常的继承体系

Throwable:
​		Error:(全部是错误)
​		Exception:(全部是异常,可以处理)
​				编译时异常:
​				运行时异常:

编译时异常和运行时异常的区分:

RuntimeException及其子类异常都是运行时异常,除了RuntimeException都是编译时异常

编译时异常的特点:

  1. 方法体中抛出的编译时异常,必须要处理
  2. 方法声明上声明编译时异常,方法调用者必须处理

运行时异常的特点:

  1. 方法体中抛出运行时异常,可以处理,也可以不处理
  2. 方法声明上声明运行时异常,方法调用者可以处理,也可以不处理了

4.异常和错误的区别

Java学习笔记之异常

错误:

是由操作系统反馈给JVM,属于摧毁性的伤害,如果出现,就只能修改代码,程序直接死亡

异常:

由JVM产生反馈给Java程序,如果针对异常处理,处理之后的代码还可以继续运行,如果不处理异常,Java程序会再次把异常抛给JVM,JVM把异常信息打印在控制台然后杀死程序;

所有异常的子类都是由Exception结尾的,可以对异常处理并继续执行;

如果不是那就是错误,错误只能修改代码;

5.异常的产生过程

Java学习笔记之异常

三、异常的处理

1.JVM处理异常的方式

  1. 将异常信息(异常类名、原因、位置)输出到控制台
  2. 退出JVM,终止程序

2.手动处理

2.1 方法内部来处理(捕获处理异常)

也被称为try—catch处理

try{
    //1.把可能有问题的代码放到这里
    //2.这里只能执行到出问题的代码那里,剩下所有的代码都不会被执行
}catch(Exception e){
    //1.如果上面的代码块出现问题,程序直接跳到这里执行
    //2.这里编写存放异常的代码;
    //3.catch这部分可以由多个catch处理多个异常,虽然大部分时间为了省事,直接使用Exception全部接受
    //但是存在需要多种异常的处理,最主要的还是区分是那里抛出的异常,可以更好的优化代码
}finally{
    //1.这里一般存放结束代码,也就是异常处理之后的善后处理
    //比如:记录信息、释放资源,结束方法并告诉使用者需要换一个等等
    //2.finally没有也可以,也没有任何问题,只不过加上去之后,可以把善后代码和本来正常的代码区分
}

注意事项:

当多个catch的异常存在继承关系,那么父类的异常要放在子类后面,子类之间的异常没有任何先后限制

Finally代码块:

  1. 特点:

    无论发生任何情况,finally中的代码块都会执行,哪怕是return,finally也会在return之前执行;

    当然只能是进入了try-catch-finally流程之内的才会这样;

  2. 作用:

    一般用来执行,释放资源的代码(IO流,释放数据库资源)

2.2 把异常抛出,告诉方法的调用者(声明或者抛出处理异常)

2.2.1 throw抛出异常

作用: 将异常对象抛给方法调用者,并结束当前方法得到运行

位置: 方法体中

格式: throw new 异常名称(“异常信息”);

注意: 这个方式虽然可以单独使用,但一般需要配合throws关键字来使用;

这种方式一般用于抛出Java程序检查不出的异常,因为很多时候Java程序允许,但是业务或者自己编写的代码逻辑不允许出现这样的参数,为了提醒自己或者测试或者其他调用者,抛出这样的异常;

2.2.2 throws抛出异常

**作用:**用来申明方法中可能出现的异常 / 将异常表示出来,提醒调用者处理异常

**位置:**方法申明上

格式: 修饰符 返回值类型 方法名 (参数列表) throws 异常名{ }

**注意:**这种方式可以单独使用

3.异常处理的注意事项

1.子类重写方法时,异常类型不能比父类方法声明的异常类型大(只能小于等于)

2.父类没有声明异常,子类出现异常处理方式:

  1. try–catch处理
  2. 声明运行时异常

4.异常处理的选择

Java学习笔记之异常

四、异常中的常用方法

1. public String toString()

获得异常信息字符串:(异常类全名:异常原因字符串)

2. public String getMessage()

获得异常原因字符串

3. public void printStackTrace()

追踪栈异常信息来源

打印异常栈信息

五、自定义异常

自定义异常步骤

1.创建一个类集成Exception或RuntiemException

2.提供两个构造方法

​ 一个无参数构造

​ 一个有参数构造

代码样例:

public class test {

    public static void main(String[] args) {
        try{
            div();
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("那就没办法了");
    }

    public static void div() throws FixException {
        System.out.println("heiheihei");
        throw new FixException("就是不让你运行");
    }

}

public class FixException extends Exception {

    public FixException() {

    }

    public FixException(String message) {
        //获取异常出现的原因,或者叫异常信息
        super(message);
    }
}
相关标签: 异常处理 java