• Java基础00-异常25


    1. 异常

    异常

    1.1 异常概述

    1.2 JVM的默认处理方案

    有一行代码报错,下面的代码就不会执行。

    1.3 异常处理

    如果程序出现了异常,需要我们自己来处理,
    因为在实际的开发中,不能因为一处的报错,影响了接下来程序的运行。

    1.4 异常处理之try … catch …

    代码示例:

    运行结果:
    这次通过自己定义的异常处理,不会再像默认的那样直接停止程序了,而是会输出一段异常处理代码,再执行下面的代码。

    1.4.1 finally关键字

    finally 关键字用来创建在 try 代码块后面执行的代码块。

    无论是否发生异常,finally 代码块中的代码总会被执行。

    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

    finally 代码块出现在 catch 代码块最后,语法如下:

    try{
      // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }finally{
      // 程序代码
    }

    1.5 Throwable的成员对象

    Throwable类是所有异常和错误类的祖宗类,所以利用多态,可以使用Throwable的子类,可以使用Throwable的成员方法。

    代码示例:
    getMessage()方法

    运行结果:
    输出了程序错误的原因

    toString()方法

    运行结果:
    输出了程序错误的位置和原因

    printStackTrace()

    运行结果:
    输出了错误原因和异常位置,还有异常信息
    printStackTrace()输出的错误信息是最全的,一般使用的是printStackTrace()方法来提示错误信息。

    1.6 编译时异常和运行时异常的区别

    编译时异常:在写代码时,编译器可以提示错误信息,不修改则不可以运行程序。
    运行时异常:在写代码时,编译器没有提示错误信息,也可以运行,但是运行后会提示异常信息。

    1.7 异常处理之throws

     

    代码示例:
    运行时异常使用throws

    运行结果:
    结果是并没有输出”结束”,可以程序已经停止,throws的作用只不过是抛出异常信息,并没有实际的解决问题

    编译时异常没使用throws时:

    编译时异常使用throws:

    编译时异常使用throws时代码时不报错了,但是调用的时候还是会报错,在调用的时候还是要我们自己处理异常。

    可见编译时异常使用throws时是,谁调用谁处理。

    运行结果:

    总结:不管是编译时异常还是运行时异常,都可以通过在方法后面加上throws,抛出异常。
    但是这种抛出,它并没有做实际的处理,真正的处理还是要通过 try … catch … 进行处理。

    1.8 自定义异常

    继承Exception

    代码示例:

    写一个自定义异常类:

    继承Exception(异常类),写一个无参构造和一个有参构造。

    创建一个使用异常的类:
    因为自定义类继承的是Exception类,所以它是编译时异常,所以要用throws接收异常对象,把异常信息抛出去,让调用者去处理。
    而throw的作用就是抛出异常对象,让throws接收,给出我们自己想要给出的提示信息。

    测试类:

    运行结果:
    98,正常

    120,超处了自定义异常类中的规定数字,报出了异常,但是没有异常信息,
    因为我们使用的是自定义异常类是无参构造的方法,这次使用有参构造方法,向下看。

    修改异常使用类:

    运行结果:
    98,正常

    120,异常,但是这次给出了报错信息,因为使用的是有参的构造方法。

    1.9 throws和throw的区别

    1     public void method() throws Exception1,Exception2,...,ExceptionN{
    2         ...
    3     }
     1     //方法内部自己抛出的异常自己处理
     2     public void test(){
     3         Scanner sc = new Scanner(System.in);
     4         int age = sc.nextInt();
     5         if(age<18 || age>80){
     6             try {
     7                 throw new Exception("test");
     8             } catch (Exception e) {
     9                 e.printStackTrace();
    10             }
    11         }
    12     }
    1     //谁调用test谁处理,也可在方法调用处继续向上抛由上层来处理
    2     public void test2() throws Exception {
    3         Scanner sc = new Scanner(System.in);
    4         int age = sc.nextInt();
    5         if(age<18 || age>80){
    6             throw new Exception("test");
    7         }
    8     }
  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/ajing2018/p/14672333.html
Copyright © 2020-2023  润新知