zoukankan      html  css  js  c++  java
  • Java基础(六)

    Java使用一种称为异常处理的错误捕获机制处理。

    一、处理错误

    错误包含:

    1、用户输入错误。

    2、设备错误。

    3、物理限制。

    4、代码错误。

    在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。

    Throwable有两个分支:Error和Exception。

    Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。

    Exception类层次分解为两个分支:一个分支派生于RuntimeException;另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。

    派生于RuntimeException的异常包含下面几种情况:

    1、错误的类型转换。

    2、数组访问越界。

    3、访问null指针。

    不是派生于RuntimeException的异常包括:

    1、试图在文件尾部后面读取数据。

    2、试图打开一个不存在的文件。

    3、试图根据指定的字符串查找Class对象,而这个字符串表示的类并不存在。

    Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常;所有其他的异常称为受查异常。

    遇到下面四种情况时应该抛出异常:

    1、调用一个抛出受查异常的方法。

    2、程序运行过程中发现错误,并且利用throw语句抛出一个受查异常。

    3、程序出现错误。

    4、Java虚拟机和运行时库出现的内部错误。

    二、捕获异常

    Java通常采用try...catch用来捕获异常,语法格式:

    try{
        code
    }
    catch(Exception e){
        handler for this type
    }

    不管是否有异常被捕获,finally子句中的代码都会被执行。

    堆栈轨迹是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。可以使用Throwable类的printStackTrace方法访问堆栈轨迹的文本描述信息;也可以使用getStackTrace方法,它会的啊StackTraceElement对象的一个数组,StackTraceElement类中含有能够获得文件名和当前执行的代码行号的方法,同时,也含有能够获得类名和方法名的方法。

    三、使用异常机制的技巧

    1、异常处理不能代替简单的测试。只在异常情况下使用异常机制。

    2、不要过分的细化异常。将正常处理和错误处理分开。

    3、利用异常层次结构。

    4、不要压制异常。

    5、在检测错误时,“苛刻”要比放任更好。

    6、不要羞于传递异常。

    四、断言

    断言机制允许在测试期间向代码中插入一些检查语句。

    Java语言隐入了关键字assert。

    断言的表现形式:
    1、assert条件;

    2、assert条件:表达式;

    这两种形式都会对条件进行检测,如果结果为false,则抛出一个AssertionError异常。在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。

    可以在程序中使用-enableassertions或-ea启用断言;使用-disableassertions或-da禁用某个特定类和包的断言;启用和禁用断言是类加载器的功能。

    Java语言中,给出三种处理系统错误的机制:

    1、抛出一个异常。

    2、日志。

    3、使用断言。

    什么时候使用断言:

    1、断言失败是致命的,不可恢复的错误。

    2、断言检查只用用于开发和测试阶段。

    断言是一种测试和调试阶段所使用的战术性工具;而日志记录是一种在程序的整个生命周期都可以使用的策略性工具。

    五、记录日志

    通常,有以下七个日志记录器级别:

    SEVERE;WARNING;INFO;CONFIG;FINE;FINER;FINEST

    在默认情况下,只记录前三个级别。

    六、调试技巧

    1、打印或记录任意变量的值。

    2、在每一个类中放置一个单独的main方法,这样就可以对每一个类进行单元测试。

    3、使用JUnit单元测试框架。

    4、日志代理是一个子类的对象,它可以截获方法调用,并进行日志记录,然后调用超类中的方法。

    5、利用Throwable类提供的printStackTrace方法,可以从任何一个异常对象中获得堆栈情况。

    6、一般来说,堆栈轨迹显示在System.err上。

    7、要想观察类的加载过程,可以用-verbose标志启动Java虚拟机。

    8、-Xlint选项告诉编译器对一些普通容易出现的代码问题进行检查。

    9、Java虚拟机增加了对Java应用程序进行监控和管理的支持。

    10、可以使用jmap实用工具获得一个堆的转储,其中显示了堆中的每个对象。

    11、如果使用-Xprof标志运行Java虚拟机,就会运行一个基本的剖析器来跟踪那些代码中经常被调用的方法。 

  • 相关阅读:
    关于表单提交的数据记录
    Hrbust 2363 Symmys (Manacher + DP)
    Codeforces 911F Tree Destruction(贪心 && 树的直径)
    Codeforces 903F Clear The Matrix(状态压缩DP)
    HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)
    Codeforces 912D Fishes (概率&期望,优先队列的应用)
    Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)
    HDU 6251 Inkopolis(2017 CCPC-Final,I题,环套树 + 结论)
    HDU 6249 Alice’s Stamps(2017 CCPC-Final G题,DP)
    2017 ACM-ICPC EC-Final 记录
  • 原文地址:https://www.cnblogs.com/libinhyq/p/12184766.html
Copyright © 2011-2022 走看看