zoukankan      html  css  js  c++  java
  • Day2 异常 日志 反射

    调用方如何获知调用失败的信息?
    1.约定返回错误码。处理一个文件,如果返回0,表示成功,返回其他整数,表示约定的错误码:
    2.在语言层面上提供一个异常处理机制

    异常

    异常是一种class,因此它本身带有类型信息。异常可以在任何地方抛出,但只需要在上层捕获,这样就和方法调用分离了。

    try {
        String s = processFile(“C:\test.txt”);
        // ok:
    } catch (FileNotFoundException e) {
        // file not found:
    } catch (SecurityException e) {
        // no read permission:
    } catch (IOException e) {
        // io error:
    } catch (Exception e) {
        // other error:
    }
    

    catch语句

    多catch语句只有一个能执行,存在多个catch的时候,catch的顺序非常重要:子类必须写在前面。例如:

    public static void main(String[] args) {
        try {
            process1();
            process2();
            process3();
        } catch (IOException e) {
            System.out.println(e);
        } catch (NumberFormatException e) {
            System.out.println(e);
        }
    }
    

    finally语句
    无论是否有异常发生,如果我们都希望执行一些语句,finally语句块保证有无错误都会执行

    异常的传播

    当某个方法抛出了异常时,如果当前方法没有捕获异常,异常就会被抛到上层调用方法,直到遇到某个try ... catch被捕获为止
    printStackTrace()对于调试错误非常有用

    抛出异常

    1.创建某个Exception的实例;
    2.用throw语句抛出。

    void process2(String s) {
        if (s==null) {
            throw new NullPointerException();
        }
    }
    

    断言

    语句assert x >= 0;即为断言,断言条件x >= 0预期为true。如果计算结果为false,则断言失败,抛出AssertionError。
    使用assert语句时,还可以添加一个可选的断言消息:

    assert x >= 0 : "x must >= 0";
    这样,断言失败的时候,AssertionError会带上消息x must >= 0,更加便于调试。

    Java断言的特点是:断言失败时会抛出AssertionError,导致程序结束退出。因此,断言不能用于可恢复的程序错误,只应该用于开发和测试阶段。

    Logging

    可以设置输出样式,避免自己每次都写"ERROR: " + var;
    可以设置输出级别,禁止某些级别输出。例如,只输出错误日志;
    可以被重定向到文件,这样可以在程序运行结束后查看日志;
    可以按包名控制日志级别,只输出某些包打的日志;

    日志的输出可以设定级别。JDK的Logging定义了7个日志级别,从严重到普通:

    SEVERE
    WARNING
    INFO
    CONFIG
    FINE
    FINER
    FINEST
    因为默认级别是INFO,因此,INFO级别以下的日志,不会被打印出来。使用日志级别的好处在于,调整级别,就可以屏蔽掉很多调试相关的日志输出。

    使用Java标准库内置的Logging有以下局限

    Logging系统在JVM启动时读取配置文件并完成初始化,一旦开始运行main()方法,就无法修改配置;

    配置不太方便,需要在JVM启动时传递参数-Djava.util.logging.config.file=

    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    dp学习笔记1
    hdu 4474
    hdu 1158(很好的一道dp题)
    dp学习笔记3
    dp学习笔记2
    hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
    hdu 1025(最长非递减子序列的n*log(n)求法)
    hdu 2063+hdu 1083(最大匹配数)
    hdu 1023
    《 Elementary Methods in Number Theory 》Exercise 1.3.12
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12347009.html
Copyright © 2011-2022 走看看