10){//抛出try {">
当前位置:   article > 正文

Java的异常机制

Java的异常机制

异常机制

三种类型

  • 检查型异常:程序员无法预见的
  • 运行时异常:在编译时会被忽略
  • 错误ERROR:错误在代码中被忽略,在编译时检查不到

异常处理机制

  • 抛出异常
  • 捕获异常
  • 异常处理的五个关键字:try,catch,finally,throw,throws

以下为这五个关键词的使用方法:

package exception;

public class Demo02 {
    public static void main(String[] args) {
        //假设要捕获多个异常:从小到大去写

        try {
            new Demo02().a();
        }catch (Error e){//catch(想要捕获的异常类型) 捕获异常
            System.out.println("ERROR");
        }catch (Exception e){
            System.out.println("EXCEPTION");
        }catch (Throwable e){
            System.out.println("THROWABLE");
        }finally {
            System.out.println("finally");
        }


    }


    public void a() {
        b();
    }

    public void b() {
        a();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
package exception;

import org.w3c.dom.ls.LSOutput;

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

        try {
            System.out.println(a/b);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
        }
    }





}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
package exception;

public class Demo01 {
    public static void main(String[] args) {

       new Demo01().test(1,0);
    }


    //假设这方法中,处理不了这个异常,方法上抛出异常用throws
    public void  test(int a,int b) throws ArithmeticException {
        if(b==0){
            throw new ArithmeticException();
        }
        System.out.println(a/b);
    }




}
/*
 int a=1;
        int b=0;
        try{//try监控区域
            if(b==0){//throw  throws用于方法
                throw new ArithmeticException();//主动抛出异常
            }

            System.out.println(a/b);
        }catch (ArithmeticException e){
            System.out.println("程序出现异常,变量b不能为0");
        } finally {//善后工作
            System.out.println("finally");
        }
        //finally 可以不要finally

 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

自定义异常

步骤

  • 创建自定义异常类
  • 在方法中通过throw关键字来抛出异常对象
  • 如果当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
  • 在出现异常方法的调用者中捕获并处理异常
package exception;
//自定义异常
public class MyException extends Exception{
    //传递数字>10
    private int detail;

    public MyException(int a){
        this.detail=a;
    }

    //toString:异常的打印信息
    @Override
    public String toString() {
        return "Demo04{" +
                "detail=" + detail +
                '}';
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

我们来测试

package exception;

public class Test {
    static void test(int a) throws MyException {
        System.out.println("传递的参数为:"+a);
        if(a>10){
            throw new MyException(a);//抛出
        }
        System.out.println("OK");
    }

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


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

总结:

  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加try-catch,处理潜在异常
  • 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/390713
推荐阅读
相关标签
  

闽ICP备14008679号