本周学习了新知识,主要内容有异常,断言和日志。具体学到的知识大致有以下几个方面:
1.异常:
java异常处理可以通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下:
try{
程序代码
}catch(异常类型1 异常的变量名1){
程序代码
}catch(异常类型2 异常的变量名2){
程序代码
}finally{
程序代码
}
catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。
异常类的层次:
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.Error
java.lang.ThreadDeath
(1)Throwable:Throwable 类是 Java 语言中所有错误或异常的超类
(2)Exception:
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。
(3)Error:Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。
(4)RuntimeException
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。
异常处理的语法规则:
第一、try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
(1)assert condition;
这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动。如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,
而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。
(2)asser condition:expr;
这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。
Java中关于日志系统的API,在 java.util.logging 包中,在这个包中,Logger类很重要。
Logger类是用来记录 某个级别的日志消息:
级别共分为以下几类,从上倒下,级别依次下降:
SEVERE(严重)------级别最高
WARNING(警告)
INFO
CONFIG
FINE
FINER
FINEST------最低值
Handler类(抽象类):主要用于转发日志消息
Hanlder类下有2个子类:MemoryHandler、StreamHandler。
StreamHandler下有3个子类:ConsoleHandler(将日志消息打印到控制台)、FileHandler(将日志消息输出到文件)、SocketHandler(将日志发送到网络中的某个主机)。
Formatter类(抽象类):主要用于格式化日志记录消息。
有2个子类:SimpleFormatter(纯文本形式), XmlFormatter(XML形式)
在本周的学习过程中,通过对实验的编写对异常处理和断言掌握的比较好,但对日志的部分比较陌生,很多代码不理解,而且网络对相关部分的解释也比较少。