Java的基本理念是:结构不佳的代码不能运行。

使用try…catch捕获异常

try {

            } catch (Exception e) {
                // TODO: handle exception
            }

try与catch关键字后面的{}不能省略,即使{}里面只有一条代码。
执行流程:

  1. try块中没有产生异常,不会进入任何catch块。
  2. 如果出现异常,依次向下执行catch块,如果和某个catch块匹配,则执行对应的异常处理代码,其他catch块的代码不执行。
  3. 如果出现异常,所以的catch块都不匹配,则程序中断。
  4. 对于多重catch,先子类异常,再父类异常。

try…catch…finally结构

try {

        } catch (Exception e) {
            // TODO: handle exception
        }finally {
            // TODO: handle finally clause
        }

当要把除内存之外的资源恢复到他们的初始状态时,就要用到finally子句。比如关闭已经打开的文件和网络连接等等。
注意:

  • finally块代码无论是否有异常都会执行。
  • 遇到return关键字,则会先执行finally,再return。
  • finally唯一不执行的情况是前面强制退出,System.exit(-1);

异常的体系结构

java 系统异常全局 java异常处理三个关键流程_exception

Error用来表示编译时和系统错误(没有特殊情况,一般不用管)。
Exception是可以抛出的基本类型。

运行时异常有:

java 系统异常全局 java异常处理三个关键流程_异常处理_02

throws关键字
使用throws声明抛出异常:当前方法不知道如何处理这种异常,该异常应该由上一级调用者处理。

throw关键字
程序自行抛出一个异常对象。

开源日志包log4j的使用

  1. 创建一个lib文件夹,将jar包拷贝进去,并加入到build path中。
  2. 从example文件夹中拷贝一个.properties文件,改名为log4j.properties,放入src文件夹中。
  3. 编写代码,进行测试。

java 系统异常全局 java异常处理三个关键流程_java 系统异常全局_03

public class TestDemo02 {
    static Logger logger = Logger.getLogger("com.lwcode.intent.TestDemo02");

    public static void main(String[] args) {
        try {
            int i = 10 / 0;
            System.out.println(i);
        } catch (Exception e) {
            // TODO: handle exception
            logger.debug(e.getMessage());// 0 DEBUG [main]
                                            // com.lwcode.intent.TestDemo02 - /
                                            // by zero
        }
    }
}

1.创建log4j.properties
log4j.rootLogger=debug,stout,logfile
参数说明:
①debug
指的是日志记录器的(Logger)的输出级别,主要级别
fatal:指出每个严重的错误事件将会导致应用程序的退出
error:虽然发生错误事件,但任然不影响系统的运行
warn:表明会出现潜在的错误的情形
info:在粗粒度级别上指明消息,强调应用程序的运行过程
debug:指出细粒度信息事件,对应用调试非常有帮助
各个级别的优先级为
fatal>error>warn>info>debug
②stout、lofile
日志输出目的地Appender
log4j允许记录日志到多个输出目的地,一个输出目的地被称为一个Appender,lo4j中常用的Appender有以下几种
ConsoleAppender:输出日志到控制台,通过Target属性配置输出到System.out或者System.err,默认为System.out
FileAppender:输出日志到一个文件,通过File属性配置文件的路径及名称
③日志布局类型Layout
Appender必须使用一个与之相关联的布局类型Layout,用来指定输出的样式,log4j中最常用的Layout有3种
HTMLLayout:格式化日志输出为HTML
SimpleLayout:以一种非常简单的方式格式化输出,它打印级别Level,然后跟着一个破折号”-“最后是日志消息
PatterLayout:根据制定的转换模式格式化日志输出,从而支持丰富多样的输出格式,需要配置layout.ConversionPattern属性,如果没有配置该属性,则使用默认的转化模式
④转换模式ConversionPattern
对于PatterLayout,需要配置layout.ConversionPattern属性,常用的配置参数及含义如下
%d:用来输出日志的日期和时间
%d{yyyy-MM-dd HH:mm:ss}
%m:输出代码中制定的信息
%n:输出换行
%l:用来输出日志事件的发生位置,包括类名、发生的线程、以及代码中的行数
%p:用来输出优先级
%F:输出文件名
%M:用来输出方法名