• 2017-9-17-Java Exception小结


    Java Exception

    异常是导致程序中断运行的一种指令流。
    Java的异常机制可以保证程序在出现异常后还可以继续进行处理,而不是立即闪退。

    处理异常的基本格式

      try {
                result = i/j;
                System.out.println(result);
            }catch (ArithmeticException e){
                System.err.println("exception: " + e.toString());
            }finally {
                System.out.println("finally");
            }
    	}
    

    try语句中是要捕获异常的部分的代码,catch是对异常进行处理的代码,finally表明无论是否出现异常都会执行的代码,可以作为程序的一个出口,在此语句块中尽量不要出现throw或者return语句,finally是可以被省略的。在执行完整个try catch语句之后才会执行下面的程序。

    异常的处理机制

    1. 产生异常,首先会生成一个异常类的实例化对象(可以由虚拟机产生,也可以由throw人为抛出)。
    2. 在try语句中对异常对象进行捕捉;
    3. 在catch语句中进行匹配,如果匹配成功就会执行catch中的语句。

    需要注意的一点是,在使用时可以使用多级exception进行捕获,也可以使用Exception将所有的Exception一次全部捕获完,但是在使用过Exception之后不能在使用它的子类进行捕获,否则编译会错,has already been caught。(其实直接使用Throwable也是可以的,但是没有意义)

    异常类的继承结构

    Java异常主要分为两类Exception和Error,他们都是继承自Throwable类(这个类竟然不是接口或者抽象类)。

    Error

    一般是JVM错误,包括JVM的内部错误和资源耗尽错误(例如OOM)。这种错误应该尽量避免,出错了也无法进行阻止,只能让程序进行关闭。

    Exception

    一般是指程序开发的问题,可以通过try...catch语句进行避免。一般又分为RuntimeException和其他的Exception。

    RuntimeException

    RunTimeException继承自Exception类,和Error一样都是非检查性异常,可以不使用try...catch进行处理,直接将异常抛给JVM处理,当然这样程序也会停止。RuntimeException常见的子类如下:

    • NullPointerException - 空指针引用异常
    • ClassCastException - 类型强制转换异常。
    • IllegalArgumentException - 传递非法参数异常。
    • ArithmeticException - 算术运算异常
    • ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
    • IndexOutOfBoundsException - 下标越界异常
    • NegativeArraySizeException - 创建一个大小为负数的数组错误异常
    • NumberFormatException - 数字格式异常
    • SecurityException - 安全异常
    • UnsupportedOperationException - 不支持的操作异常

    其他异常

    直接继承自Exception的异常类,必须显式的用try...catch语句进行异常处理或者抛出,由高级调用者进行处理,否则编译就会不通过。

    throws和throw

    • throws表示当前不处理异常,让调用者进行处理。
    • throw表示认为的抛出一个异常,抛出时直接抛出异常类的实例化对象即可。

    自定义异常类

    继承Exception类。

    断言

    断言是来判断最终的结果的返回值是否是正确的,如果最终返回值是错误的,则通过断言提示错误信息。但是在开发中并不提倡使用断言。
    使用方法

    assert <布尔表达式> 
    assert <布尔表达式> : <错误信息> 
    

    默认情况下是不开启的,需要在运行时加上-ea参数。

  • 相关阅读:
    模板 快速询问GCD
    Educational Codeforces Round 13 A. Johny Likes Numbers 水题
    Codeforces Round #102 (Div. 1) A. Help Farmer 暴力分解
    CDOJ 1402 三角形棋盘上的博弈游戏 状压DP
    CDOJ 1401 谭爷的黑暗沙拉 数学
    Bootstrap3.0学习第七轮(按钮)
    Bootstrap3.0学习第六轮(表单)
    Bootstrap3.0学习第五轮(表格)
    Bootstrap3.0学习第四轮(排版)
    Bootstrap3.0学习第三轮(栅格系统案例)
  • 原文地址:https://www.cnblogs.com/abel-huang/p/7633121.html
Copyright © 2020-2023  润新知