栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于异常详解---java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于异常详解---java

前言

一、避免异常的两种方式

1.LBYL

 2.EAFP

二、异常的基本用法

1.异常的基本语法

2.使用try...catch...finally注意事项

三、异常的体系结构

1.顶层类Throwable

1.顶层类Throwable 派生出两个重要的子类Error和Exception

2.非受查异常与受查异常

2.自定义类

总结



前言

  首先,对于异常来说是程序运行时抛出的错误,编译出错,不属于此处的异常。


一、避免异常的两种方式

1.LBYL

LBYL : Look Before You Leap.  在操作之前做好充分的检查

代码风格如下:

  //这里登录游戏伪代码展示
        boolean ret = false;
        ret = 登录游戏();
        if(!ret){
            登录游戏错误处理;
            return;
        }
        ret = 开始匹配();
        if(!ret){
            处理匹配错误;
            return;
        }
        .......

 2.EAFP

EAFP :It's Easier to Ask Forgiveness than Permission. " 事后获取原谅比事前获得许可更容易"

代码风格如下:

    try{
            登录游戏();
            开始匹配();
        }catch (登录游戏异常){
            异常处理
        }catch (开始匹配异常){
            异常处理
        }
        ......

对比上述的两种代码的风格,可以看出采用EAFP的方法显得代码更加的清晰简洁,更容易理解。

二、异常的基本用法

1.异常的基本语法

try{

 // 里面存放可能出现异常的代码

}catch(捕获相应的异常){           //此处的catch可以有[0,N]个

 // 出现异常后的处理方式

}finally{

//不是强制要求写的

//无论是否发生异常,都会执行的代码块

//关闭资源的处理

}

2.使用try...catch...finally注意事项

1.如果catch后面跟的异常与try代码块中发生的异常类型不匹配--->就无法捕获发生的异常。

所以可以有多个catch来捕获不同的异常类型。

2.在try代码块中出现异常,并且被catch捕获,则不会影响代码块之后的代码执行。

3.如果try代码块中出现异常,那么try代码块中的后面的程序就不会执行了,而是交给catch代码块

执行,catch执行完毕,会继续的往下执行。

4.finally代码块,无论是否发生异常都会执行的代码块----通常做善后处理(资源的关闭等)。

5一旦finally中带入了返回值,则catch和try代码块中的返回值就失效了---会执行finally中的返回

值。所以一般的情况下,尽量不需要在finally代码块中带入返回值;

实例代码如下:

public  class Test {

    public int add(){

        try{
            int a = 0;
            if(a == 0){
                return 0;
            }
            int b  = 1/a;

        }catch (ArithmeticException e){
            return 1;
        }
        finally {
            return 3;
        }
    }
    public static void main(String[] args) {
        System.out.println(new Test().add());
    }
}

这里演示的是try代码块中的返回值失效,走到 return 0 时,就会执行finally中的代码块,然后最后返回了 3。

6.关于异常的调用链 :异常会随着调用链不断的向上传递,直到有一处捕获异常为止。如果处理的过程中都没有处理异常,最终会将异常抛给JVM,然后程序就终止了。

7.JDK7新增的自动关闭接口 : 声明在try的()中

代码演示如下:

public  class Test {
    
    public static void main(String[] args) {
        //此处就可以保证在try执行完毕后,自动的调用Scanner 的 close 方法
       try(Scanner scanner = new Scanner(System.in)){
           int num = scanner.nextInt();
           System.out.println(num);
       }catch (Exception e){
           e.printStackTrace();
       }
    }
}

8.一组关键字:throws : 用在方法的声明上,明确的表示该方法可能会有异常,但是不处理,抛回给调用者处理。 throw : 用在方法的内部,人为的产生异常的对象抛出。

throws 的代码演示:

public  class Test {

    public static void main(String[] args) {
      try{
          test();
      }catch (NullPointerException e){
          System.out.println("我是他的调用者,我处理了异常");
          e.printStackTrace();
      }
    }

    public static void test() throws NullPointerException{
        String str = null;
        System.out.println(str.equals("hello"));
    }
}

throw代码演示:

public  class Test {

    public static void main(String[] args) {
        test();
    }

    public static void test() throws NullPointerException{
        throw new NullPointerException("没事抛出个空指针异常,就是玩~~");
    }
}

三、异常的体系结构

1.顶层类Throwable

1.顶层类Throwable 派生出两个重要的子类Error和Exception

Error :  是指java运行时内部错误和资源耗尽的情况; 例如StackOverflowError(栈溢出)、OutOfMemoryError(堆溢出)

Exception : 就是我们程序员所使用异常类的父类

2.非受查异常与受查异常

非受查异常 :不强制使用try...catch代码块处理的异常 。Error以及RuntimeException及其子类(数组越界异常、空指针异常、类型转换异常)都是非受查异常。

受查异常 : 必须显示的使用try...catch代码块来捕获异常,或者使用throws抛出。例如FileNotFoundException异常。

2.自定义类

1.自定义类通常会继承自 Exception 或者 RuntimeException。

2.继承自Exception的异常默认是受查异常

3.继承自RuntimeException的异常默认是非受查异常。


总结

继续的加油啊,小老弟~~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号