Java_异常

2020-04-08  本文已影响0人  老北瓜

概念 : 程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
在java中,异常本身就是一个类,产生的异常的过程是创建异常对象并抛出一个异常对象,java处理异常的方式是中断处理。

异常体系 Throwable

Error(不能处理,只能尽量避免,只有修改掉异常,程序才能继续执行)
|------ 内存溢出 , 只能修改源代码了
Exception (使用不当导致,可以避免,把异常处理掉,程序可以继续执行)
|----- 编译期异常,编译就出现问题
|----- RuntimeException 运行期异常,java程序运行过程中出现的问题

处理异常的方法 有 throw Exception 和 try{} catch()

异常产生的过程: 出现异常的地方被JVM检测出来,会根据异常产生的原因创建一个异常对象,包含了异常的内容,原因和位置;如果没有处理异常的逻辑,jvm把异常对象向上抛出给调用者来处理( main() ), 如果调用者也没有处理异常的逻辑,向上抛出给jvm处理,jvm接收到异常后,把异常对象打印在控制台,中断当前的运行的程序。

处理异常的关键字
throw : 可以在指定的方法中抛出指定的异常
必须卸载方法的内部
后边new 的对象必须是 Exception 或其子类
抛出指定的异常对象,我们必须处理, RuntimeException 可以不处理
throws: 当方法内部抛出异常的时候,必须处理这个异常对象, 可以使用throws处理异常对象,(RuntimeException除外)会把异常对象抛出给方法的调用者处理,最终交给jvm


image.png

在定义方法的地方添加了 throws FileNotFoundException

捕获异常 try catch 自己来处理的异常

 public static void main(String[] args) {
        try {
            method("a.tx");
        } catch (FileNotFoundException e) {
            System.out.println("自己处理异常 ");
        }

    }
    private static void method(String file) throws FileNotFoundException {
        if (!file.endsWith(".txt")) {
            throw new FileNotFoundException("文件后缀名不对");
        }
    }

Throwable 类中定义了三个异常处理的方法
(Exception e) e.getMessage()
e.toString()
e.printStackTrace();

finally 代码块
不管异常是否发生都要执行的代码 写在 finally{ } 代码块中。
一般用于资源释放(资源回收,比如 io流中)
如果finally 中有return , 返回的结果永远是 finally 中的结果,应该避免这种情况

多个异常的捕获
一个 try 对应多个catch , 一次捕获,多次处理

*** 自定义异常类***
继承 Exception 或者 RuntimeException
重写一个空构造方法 和一个 带异常信息的构造方法

public class MyException extends  Exception {

    public MyException() {
    }

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

模拟注册操作,如果用户名已存在,抛出异常

上一篇下一篇

猜你喜欢

热点阅读