• 异常机制


    异常的定义:在程序运行过程中出现的意外事件,导致程序中断执行。

    try...........catch:

    语法:
    try{
    //可能出现异常的代码
    }catch(异常类型 异常对象名){
    //处理异常的代码;
    }
    执行过程:
    当try中的代码异常发生时抛出一个异常对象,该异常对象与catch中异常类型进行匹配,匹配成功进入catch块,否则不执行catch中代码(相当于异常未被处理)。
    程序只有当异常处理成功后才能继续执行。

    1.try...catch
    * try{
    * //可能出现异常的代码
    * }catch(异常类型 e){
    * //处理异常的代码
    * }
    * 执行过程:当try中代码出现异常时,将会抛出一个异常对象,
    * 该异常对象会和catch中异常类型进行匹配,如果匹配成功将执行catch中的代码,否则程序中断执行。
    * 异常对象中常用的方法
    * printStackTrace():打印异常堆栈跟踪信息(类,消息和异常跟踪信息)
    * toString():异常信息(类和消息)
    * getMessage():异常消息(异常消息)

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    try...........catch......catch:

    语法:
    try{
    //可能出现异常的代码
    }catch(异常类型1 对象名){
    //处理代码1;
    }catch(异常类型2 对象名){
    //处理代码2
    }....

    try...catch结构:
    * 语法:
    * try{
    * //可能出现异常的代码
    * }catch(异常类型1 e){
    * //处理异常类型1的代码;
    * }catch(异常类型2 e){
    * //处理异常类型2的代码;
    * }...
    * 执行过程与多重的if...else if条件分支类似,如果try中的代码发生的异常,将抛出一个异常对象,
    * 该异常对象会catch中的异常类型挨个进行匹配,如果匹配成功将执行catch块中的处理代码。
    * 注意:异常类型的范围应该是有小到大(子类-->父类),否则会导致其下的catch中的代码不会执行。
    */

    public class TestException3 {
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入被除数:");
    int num1=0;
    int num2=0;
    int num3=0;
    try{
    num1 = input.nextInt();
    System.out.println("请输入除数:");
    num2 = input.nextInt();
    num3 = num1/num2;
    }catch(InputMismatchException e){
    System.err.println("请输入数字!");
    }catch(ArithmeticException e){
    System.err.println("除数不能为零!");
    }
    String str = String.format("%d/%d=%d", num1,num2,num3);
    System.out.println(str);
    System.out.println("程序执行结束!");
    }
    }
    

      

    执行过程:当try中代码出现异常时,抛出一个异常对象,将该异常对象与catch块中异常类型依次匹配,匹配成功执行其下catch块中代码。
    注意:异常类型的范围应该有小到大,先放子类异常类型,再父类异常类型。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    try.........catch......finally...:

    语法:
    try{
    //可能出现异常的代码
    }catch(异常类型1 对象名){
    //处理代码1;
    }catch(异常类型2 对象名){
    //处理代码2
    }finally{
    //会被执行的代码
    }
    finally块中代码一定会执行,如果在try或catch块中存在retrun语句,先执行finally中的代码,然后执行return语句。
    finally中代码只有在退出程序(退出虚拟机)时才不会执行---->System.exit()

    try.....finally:

    语法:
    try{
    //可能出现异常的代码
    }finally{
    //一旦会执行的代码
    }

    finally块中代码经常用于资源的释放,比如数据连接的关闭,IO流的关闭等

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    * throws和throw关键字.
    * throws:在声明方法时声明该方法存在的异常。
    * throw:在方法内部抛出异常。
    * throws和throw的区别:
    * 1.位置不同: throws在方法声明名用于声明该方法存在的异常,throw在方法内部用于抛出异常。
    * 2.类型不同: throws后边跟的是异常类型,throw后边的异常对象
    * 3.作用不同: throws的作用是告知方法的调用者该方法存在某种异常类型需要处理,
    * throw的作用在用于抛出某种具体的异常对象。
    * 经常throws和throw结合使用。
    */

    public class TestThrows {
    public static int divide() throws ArithmeticException{
    Scanner input = new Scanner(System.in);
    System.out.println("请输出被除数:");
    int num1 = input.nextInt();
    System.out.println("请输出除数:");
    int num2 = input.nextInt();
    int num3 =0;
    try{
    num3 =num1/num2;
    }catch(ArithmeticException e){
    throw new ArithmeticException();//抛出异常
    }
    return num3;
    }
    
    public static void main(String[] args) {
    try{
    int num3 = divide();
    }catch(ArithmeticException e){
    System.err.println("除数不能为零!");
    }
    }
    
    
    }
    

      

  • 相关阅读:
    [导入]全功能游戏与仿真引擎Delta3D简介
    [导入]创建一个存储过程,根据系部编号查出男生、女生人数
    [导入]判断学号前十位的年龄最大的女学生是否是汉族的
    [导入]SQL中的临时表和表变量
    [导入]sqlserver 判断临时表是否存在语句.
    [导入]IT程序员喝酒喝出的计算机文化
    [导入]在SQL Server和MySql中创建临时表的方法
    mysql常用命令大全
    PHP5.4 for Apache ; php 5.4.0安装过程、方法、配置 ; Apache2.2支持php5.4的配置方法
    StackTrace
  • 原文地址:https://www.cnblogs.com/benpaozhimeng/p/6979888.html
Copyright © 2020-2023  润新知