• 异常处理(一)


    java的异常体系:

    Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。

    它有两个子类:Error和Exception。

    Error:用于指示合理的应用程序不应该试图捕获的严重问题。

    Exception:它指出了合理的应用程序想要捕获的条件。

    Exception又分为两类:

    一种是CheckedException,另一种是UncheckedException。

    这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。

    我们常见的RuntimeExcepiton有IllegalArgumentException、IllegalStateException、NullPointerException、IndexOutOfBoundsException等等。对于那些CheckedException就不胜枚举了,我们在编写程序过程中try...catch...捕捉的异常都是CheckedException。io包中的IOException及其子类,这些都是CheckedException。

     

    Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
    • try        -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
    • catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
    • finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中    的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
    • throw   -- 用于抛出异常。
    • throws -- 用在方法签名中,用于声明该方法可能抛出的异常。

     

    try-catch块

    import java.util.Scanner;
    /**
    * 使用try-catch进行处理异常
    * @author Administrator
    *
    */
    public class Test {
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入被除数");
    try {
    int num1=in.nextInt();
    System.out.println("请输入除数");
    int num2=in.nextInt();
    System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
    System.out.println("感谢使用本程序");
    } catch (Exception e) {
    System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
    e.printStackTrace();
    }
    }

    }

    try-catch程序块执行比较简单,先执行try语句块中的语句,可能会有以下3种情况:

    1)如果try块中所有语句正常执行完毕,不发生异常,那么catch块中的所以语句都将会被忽略

    2)如果try语句块在执行过程中遇到异常,并且这个异常与catch中声明的异常类型相匹配,那么try块中其余剩下的代码都将被忽略,而相应的catch块将会被执行

    3)如果try语句块在执行过程中遇到异常,而抛出的异常在catch块里面没有声明,那么程序立刻退出.

    try-catch-finally块

     try
        {
             // 可能发生异常的代码
            // 如果发生了异常,那么异常之后的代码都不会被执行
        }
        catch (Exception e)
        {
            // 异常处理代码
        }
        finally
        {
            // 不管有没有发生异常,finally语句块都会被执行
        }

    import java.util.Scanner;
    /**
    * 使用try-catch-finally进行处理异常
    * @author Administrator
    *
    */
    public class Test {
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入被除数");
    try {
    int num1=in.nextInt();
    System.out.println("请输入除数");
    int num2=in.nextInt();
    System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
    } catch (Exception e) {
    System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
    System.out.println(e.getMessage());
    }finally{
    System.out.println("感谢使用本程序");
    }
    }

    }

    try-catch-finally程序块的执行流程大致分为2中情况:

    1)如果try块所有语句正常执行完毕,那么finally块就会被执行.

    2)如果try语句块在执行过程中碰到异常,无论这种异常能否被catch块捕获到,都将执行finally块中的代码

    多重catch块

      一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。

    import java.util.InputMismatchException;
    import java.util.Scanner;
    /**
    * 使用try-catch-finally进行处理异常
    * @author Administrator
    *
    */
    public class Test {
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入被除数");
    try {
    int num1=in.nextInt();
    System.out.println("请输入除数");
    int num2=in.nextInt();
    System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
    }catch(InputMismatchException e){
    System.out.println("被除数和除数必须是整数");
    }catch(ArithmeticException e){
    System.out.println("除数不能为零");
    } catch (Exception e) {
    System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
    System.out.println(e.getMessage());
    }finally{
    System.out.println("感谢使用本程序");
    }
    }

    }

  • 相关阅读:
    查找list中的重复数据,并得到不重复数据索引位置
    sql server 存储过程中使用事务
    C#获取web.config配置文件内容
    SendKeys.Send 方法
    C# 获取当前路径方法(转载)
    asp.net中URL参数传值中文乱码的三种解决办法
    无法 连接到SQLEXPRESS 已成功与服务器建立连接,但是在登录过程中发生错误。管道的另一端无任何进程
    Windows7 IIS7 无法启动计算机上的服务W3SVC如何修复,计算机上无法找到.was解决方案 visita iis 7.0
    EXCEL开发Interior.ColorIndex 色彩列表
    asp.net web 登录文本框的回车设计
  • 原文地址:https://www.cnblogs.com/sujulin/p/6661610.html
Copyright © 2020-2023  润新知