zoukankan      html  css  js  c++  java
  • java异常处理

    异常处理的结构

    try{
        可能出现异常的语句    
    }[catch(异常类型 对象){
        //进行异常处理
    }][catch(异常类型 对象){
        //进行异常处理
    }][catch(异常类型 对象){
        //进行异常处理
    }][finally]{
        无论是否出现异常都要执行的语句
    }
    

    案例:编写一个简单的异常

    public class Test{
        public static void main(String args[]){
            System.out.println("进行计算");
            try{
                System.out.println(10/0);
            }catch(ArithmeticException e){
                e.printStackTrace();//进行异常输出的方法
            }
            System.out.println("计算结束");
        }
    }

    运行结果

    进行计算
    java.lang.ArithmeticException: / by zero
            at Test.main(Test.java:6)
    计算结束
    

    Throwable是所有异常的父类,其中有Error,和Exception

    Error:指的是jvm异常,此时程序还没有执行;

    Exception:指的是程序运行过程中产生的异常

    throws关键字:

    当程序出现异常之后交给调用处处理,而且调用的时候必须进行异常处理

    class MathUtil{
        public static int div(int x,int y) throws Exception{
            return x/y;
        }
    }
    public class Test{
        public static void main(String args[]){
            try{
                System.out.println(MathUtil.div(10,2));//由于throws的存在,所以此处必须进行异常的处理
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

    当某一个方法通过throws抛出异常,那么在调用的时候必须使用try{}catch{}进行处理,如果在主方法上面继续抛出异常则异常交给jvm进行处理

    throw关键字:throw可以主动抛出一个异常,然后利用try{}catch{}进行处理

    public class Test{
        public static void main(String args[]){
            try{
                throw new Exception("自定义异常");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

    throws和throw之间的区别

      throw:指的是在方法中人为的抛出一个异常,这个异常可以是自己定义的也可以是系统定义的异常

      throws:指的是在方法定义定义的时候进行异常的抛出,在该方法被调用的时候必须进行异常的处理

    范例:简单的异常代码模型

    class MyMath{
        public static int div(int x,int y) throws Exception{ //此处抛出异常交给调用处处理
            System.out.println("计算开始");
    
            int result = x/y;
            System.out.println("计算结束");
            return result;
        }
    }
    public class Test{
        public static void main(String args[]){
            try{
                MyMath.div(10,0); //此处出现异常,想让后面的语句也能继续执行,需要在MyMath类中处理x/y这条语句
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

    执行结果

    计算开始
    java.lang.ArithmeticException: / by zero
            at MyMath.div(Test.java:5)
            at Test.main(Test.java:13)
    

    出现异常之后,后面的语句将不再执行,这样的代码不利于程序的运行

    范例:改善以上程序

    class MyMath{
        public static int div(int x,int y) throws Exception{ //此处抛出异常交给调用处处理
            int result = 0;
            System.out.println("计算开始");
            try{
                result = x/y; //如果出现异常,这句代买不执行
            }catch(Exception e){
                throw e;//抛出异常给方法,方法中因为存在throws,就会把throw抛出异常交给被调用处处理
            }finally{//表示无论是否出现异常都要执行
            System.out.println("计算结束");
            }
            return result;
        }
    }
    public class Test{
        public static void main(String args[]){
            try{
                MyMath.div(10,0); //此处出现异常,想让后面的语句也能继续执行,需要在MyMath类中处理x/y这条语句
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
    计算开始
    计算结束
    java.lang.ArithmeticException: / by zero
            at MyMath.div(Test.java:6)
            at Test.main(Test.java:18)
    

    RuntimeException类

    如果在方法上面通过throws抛出了RuntimeException类或者子类异常,用户可以根据需要尽心选择性处理,如果用户不处理则交给jvm进行处理 

    问? Exception和RuntimeException类的区别;

    Exception是RuntimeException的父类,throws抛出Exception异常用户必须处理,RuntimeException可以选择性进行处理

    RuntimeException常见的子类:NullPointerException,ClassCastException ArithmeticException

    assert关键字(断言)

    两种形式

    1. assert boolean表达式;

    2. assert boolean表达式: 基本类型/表达式/object类型;   这里和三目运算符比较相似

    在进行程序编译的时候需要手动启用assertion功能

  • 相关阅读:
    vs2013项目停止调试后 iis express也跟着退出
    windows使用bat文件定时备份文件
    javascript方法重载惹的祸
    Windows无法启动MySQL服务,错误1067
    mysql应用学习-解决数据乱码
    mysql应用学习-在cmd命令窗口下创建数据库和表
    mysql应用学习-windows(64位)安装和配置mysql(5.6.20)
    如何更新maven需要的jar包
    如何恢复sqlserver误删除的数据(摘)
    Centos安装图形化界面
  • 原文地址:https://www.cnblogs.com/hu1056043921/p/7340864.html
Copyright © 2011-2022 走看看