Java——异常

类Throwable: 所有错误和异常的超类

其直接子类:

        Error (错误异常):是程序中无法处理的错误

        Exception(异常):程序可以捕获并且可以处理的异常。



Exception异常分为两类:运行时异常和编译异常。

运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。比如说试图使用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。

编译异常(受检异常):Exception中除RuntimeException极其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过。在程序中,自定义异常类通常不会直接继承该异常类,推荐定义运行时异常。

Error,Exception,RunTimeException的常见异常

Error:

        StackOverflowError:当应用程序递归太深而发生内存溢出时,抛出该错误。

Exception:

        IOException,

        NoSuchMethodException,

        NoSuchFieldException,

        SQLException,

        ClassNotFoundException

RunTimeException:

        ConcurrentModificationException(并发异常)

        NullPointerException(空指针异常)

        IllegalArgumentException(参数不合法异常)

        IndexOutOfBoundsException(越界异常)

        ClassCastException(类型强转异常)

        ArithmeticException(算术异常)

        String getMessage(): 获取异常的描述信息,原因(提示给用户的时候,就提示错误原因).

        String toString(): 获取异常的类型和异常描述信息(不用).

        void printStackTrace(): 打印异常的跟踪栈信息并输出到控制台.  不需要使用System.out.println().


    包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace.

     测试时在catch语句块中,应写上e.printStackTrace();目的:查看异常的具体信息,方便调试和修改.

处理异常:

    声明异常:    throws

    捕获异常:    

        try{

             编写可能会出现异常的代码

        }catch(异常类型A  e){  当try中出现A类型异常,就用该catch来捕获.

            处理异常的代码

            //记录日志/打印异常信息/继续抛出异常

        }catch(异常类型B  e){  当try中出现B类型异常,就用该catch来捕获.

            处理异常的代码

             //记录日志/打印异常信息/继续抛出异常

        }finally{

    }

抛出异常:    throw


自定义异常:

继承Exception或子类,一般继承于RunTimeException

自动关闭资源:

        try(

            OutputStream out = new FileOutputStream("");

        ){

            out.write(1);

        }catch(Exception e){

            e.printStackTrace();

        }

处理异常的原则:

        1:异常只能用于非正常情况,try-catch的存在也会影响性能.

        2:需要为异常提供说明文档,比如Java doc,如果自定义了异常或某一个方法抛出了异常,我们应该记录在文档注释中..

        3:尽可能避免异常,如NullPointerException

        4:异常的粒度很重要,应该为一个基本操作定义一个 try-catch 块,不要为了简便,将几百行代码放到一个 try-catch 块中.

        5:不建议在循环中进行异常处理,应该在循环外对异常进行捕获处理(在循环之外使用try-catch).

        6:自定义异常尽量使用RuntimeException类型的.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理...
    JourWon阅读 5,043评论 0 5
  • 原文链接:blog.ouyangsihai.cn >> 你所需要的java异常的处理和设计及深入理解,看这篇就差不...
    程序员欧阳阅读 4,400评论 2 3
  • Java异常类型 所有异常类型都是Throwable的子类,Throwable把异常分成两个不同分支的子类Erro...
    予别她阅读 4,514评论 0 2
  • 目录介绍 10.0.0.1 见过哪些运行时异常?异常处理机制知道哪些?从异常是否必须需要被处理的角度来看怎么分类?...
    杨充211阅读 3,424评论 0 1
  • 我会祈祷,祈祷老天保佑善良的我们穿过黑暗,永远活在温暖的阳光下。 祈祷我们不会被恶俗的小人中伤,远离那些贪劣的坏人...
    驻足现在阅读 1,747评论 0 0

友情链接更多精彩内容