异常

异常-Exception

什么是异常

实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求...

异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。

异常发生在程序运行期间,它影响了正常的程序执行流程。

简单分类

  1. 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
    • 要打开一个不存在的文件时,一个异常就发生了
  2. 运行时异常:运行时异常是可能被程序员避免的异常。运行时异常可以在编译时被忽略。
  3. 错误ERROR:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。
    • 当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常体系结构

  • Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的父类。
  • 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误ERROR和异常Exception。

image-20201122010130885

Error

image-20201122012357667

Exception

image-20201122012449617

异常处理机制

  • 抛出异常
  • 捕获异常

异常处理的五个关键字

try,catch,finally,throw,throws\

Test.java

package com.exception;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        try {
            System.out.println(a/b);
        } catch (Exception e) {
            e.printStackTrace();//打印错误的栈信息
        } finally {
            System.out.println("=================");
        }

        try {//try监控区域
            new Test().a();
        } catch (Error e) {
            System.out.println("Error");
        } catch (Exception e) {
            System.out.println("Exception");
        }catch (Throwable e) {
            System.out.println("Throwable");
        }finally {//可以不要finally,常用于IO,资源关闭
            System.out.println("=================");
        }

        try {//try监控区域
            if (b==0){
                throw new ArithmeticException();//主动抛出异常
            }
            System.out.println(a/b);
        } catch (Error e) {
            System.out.println("Error");
        } catch (Exception e) {
            System.out.println("Exception");
        }catch (Throwable e) {
            System.out.println("Throwable");
        }finally {//可以不要finally,常用于IO,资源关闭
            System.out.println("=================");
        }
    }
    public void a(){
        b();
    }
    public void b(){
        a();
    }

}

Test1.java

package com.exception;

public class Test1 {
    public static void main(String[] args) {
        try {
            new Test1().test(1,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }

    //假设这方法中,处理不了这个异常,方法可以把异常抛出
    public void test(int a,int b) throws ArithmeticException{
        if (b==0){
            throw new ArithmeticException();//主动抛出异常
        }
    }
}

自定义异常

image-20201122014725362

MyEception.java

package com.exception.demo02;
//自定义异常类
public class MyEception extends Exception{
    //传递数字>10
    private int detail;
    public MyEception(int a){
        this.detail = a;
    }

    //toString:异常的打印信息

    @Override
    public String toString() {
        return "MyEception{" +
                "detail=" + detail +
                '}';
    }
}

Test.java

package com.exception.demo02;

public class Test {

    //可能会存在异常的方法
    static void test(int a) throws MyEception{
        System.out.println("传递的参数"+a);

        if (a>10){
            throw new MyEception(a);//抛出
        }
        System.out.println("ok");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyEception e) {
            System.out.println("MyException=>"+e);
        }
    }
}

实际应用中的经验总结

image-20201122015758250

posted on 2020-11-22 02:02  kikikikikiku  阅读(96)  评论(0编辑  收藏  举报