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

java异常处理机制相关

程序员文章站 2022-04-12 23:18:04
...

1.什么是异常?

异常就是程序出现了问题,错误.

2.异常分类

①编译时异常:编译器在程序员编写代码时检测出来的代码问题,需要程序员自己修改

②运行时异常:编译通过,在程序运行时出错

3.异常体系结构

throwable:

①error:严重问题

②exception:

RuntimeException:运行时异常

!RuntimeException:编译时异常

java异常处理机制相关4.异常产生原理

ps:java对异常默认的处理方式,是将问题抛给上一级.

在抛出异常之前,java会根据错误产生的异常类,创建出该类的实例(对象),底层通过throw关键字将异常抛出给上一级,不断向上抛出,直到抛给JVM虚拟机,虚拟机将错误原因和位置打印到控制台反映给我们.

5.异常处理

①程序可以自己处理的,使用try...catch自行处理后,不影响其他代码的运行

②程序本身处理不了的,通过throws声明出去.仅仅对方法进行声明,告诉调用者此方法存在异常.

声明异常throws:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须在有异常的方法上通过throws进行声明,让调用者去处理。如果跑出的异常对象是RuntimeException,则方法上无需throws声明.

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

//格式: 修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{   }    
public class ThrowsDemo {
    public static void main(String[] args) throws FileNotFoundException {
        read("a.txt");
    }

    // 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明
    public static void read(String path) throws FileNotFoundException {
        if (!path.equals("a.txt")) {//如果不是 a.txt这个文件 
            // 我假设  如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常  throw
            throw new FileNotFoundException("文件不存在");
        }
    }
}
//throws用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。

public class ThrowsDemo2 {
    public static void main(String[] args) throws IOException {
        read("a.txt");
    }

    public static void read(String path)throws FileNotFoundException, IOException {
        if (!path.equals("a.txt")) {//如果不是 a.txt这个文件 
            // 我假设  如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常  throw
            throw new FileNotFoundException("文件不存在");
        }
        if (!path.equals("b.txt")) {
            throw new IOException();
        }
    }
}

6.异常注意事项

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

注:

spring中默认的事务回滚是RuntimeException,若要将在所有异常进行回滚,需要在方法声明加上注解

@Transactional(rollbackFor={Exception.class}).

相关标签: Java面试问题