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

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

    比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常。

    异常发生的原因有很多,通常包含以下几大类:

    1用户输入了非法数据。

    2要打开的文件不存在。

    3网络通信时连接中断,或者JVM内存溢出。

    这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-

    JAVA语言提供两种异常处理机制:捕获异常和声明抛弃异常

    1)捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。

    2)声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。

    下面将通过若干个例子说明JAVA中异常处理机制

    Java程序出现异常的不同情况

    1.Throwable(异常最顶端的类)
    Error(服务器崩溃 数据库崩溃)
    Exception(异常类)
    RuntimeException(运行时异常)
    下面是几种常见的异常
    //NullPointerException 空指针异常
    //ArrayIndexOutOfBoundsException 数组角标越界异常
    //ArithmeticException 算数异常
    //ClassCastException 类型转换异常

    处理异常
    try......catch.....finally
    try 指测试异常代码
    catch 指捕获异常信息
    finally 指异常结束后要做的是什么

    try...catch捕获异常的流程
    1.函数中 某句代码发生异常
    2.发生异常 就产生了对应的 异常对象
    3.这个对象返回给 调用者
    情况1: 没有对异常进行处理 这时就会把异常
    交给JVM去处理 JVM使用了默认的处理机制
    情况2: 调用者进行了异常处理(try...catch)
    这时返回的异常对象 会跟catch进行匹配
    匹配成功执行catch中的语句
    程序继续运行

    2.处理空指针/角标越界/算数异常
    public static void main(String[] args) {
    int[] array = new int[4];
    try {
    //报的异常 产生越界异常的对象
    //System.out.println(array[5]);
    array = null;
    System.out.println(array[1]);
    System.out.println(10 / 0);
    //注意: 如果catch中要写Exception 来捕获异常
    //要放到最下面 并且 catch中的异常要从小到大写
    }catch(ArrayIndexOutOfBoundsException e) {
    //在匹配catch的时候 有一个被匹配上
    //其他的catch 就不会再匹配了
    System.out.println("你越界了");
    }catch(NullPointerException e) {
    System.out.println("你空指针了");
    }catch(ArithmeticException e) {
    System.out.println("你除0了");
    }
    catch(Exception e) {
    System.out.println("你写错代码了");
    }
    System.out.println("执行没有?");
    }

    3.出现异常与否 不会影响finally的执行
    也就是说finally一定会执行
    finally的作用:一般用来关闭资源 关闭流 关闭数据库
    public static void fun() {
    try {
    System.out.println(10 / 2);
    //即使你直接return方法 finally也会执行
    //直接关闭JVM虚拟机关了就不执行了
    //System.exit(0); 关闭虚拟机
    return;
    } catch (Exception e) {
    System.out.println("你除0了");
    }finally {
    System.out.println("一定会执行");
    }
    System.out.println("执行了吗?");
    }

    4继承重写

    class Father{
    public void fun() {

    }
    }
    //如果父类没有抛出编译异常 子类能不能抛出编译异常?
    //父类没有抛出异常 子类一定不能抛

    //如果在子类重写父类方法中 调用了一个有异常的方法怎么办?
    //这时只能选择try...catch处理 不能抛出了

    //如果父类有抛出编译异常 子类能不能抛出编译异常?
    //子类可以不抛出异常 也可以抛
    class Son extends Father{
    @Override
    public void fun() {
    try {
    method();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    //带异常的方法
    public void method() throws Exception{

    }
    }

  • 相关阅读:
    复利结对项目 增添
    结对编程-对队友的评价
    复利结对项目
    阅读《构造之法》第4章有感
    单元测试
    实验一 命令解释程序cmd的编写
    阅读《构造之法》1、2、3章有感
    复利计算
    实验总结
    汉堡包评价
  • 原文地址:https://www.cnblogs.com/xuange1/p/9942258.html
Copyright © 2011-2022 走看看