201671010116. 2016-2017-8《Java程序设计》第9周学习总结

本周学习了新知识,主要内容有异常,断言和日志。具体学到的知识大致有以下几个方面:

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这三个关键字均不能单独使用。

        第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

 

        第三、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。

 

        第四、throw语句后不允许有紧跟其他语句,因为这些没有机会执行。

 

       第五、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。
2.断言:
assert。在程序开发过程中使用它创建一个断言(assertion),它的语法形式有如下所示的两种形式:
(1)assert condition;
    这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动。如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,
而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。
(2)asser condition:expr;
    这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。
当执行代码时,使用-ea选项使断言有效,也可以使用-da选项使断言无效(默认为无效)。同样,也可以通过在-ea或-da后面指定包名来使一个包的断言有效或无效。例如,要使一个com.test包中的断言无效,可以使用:-da:com.test
3.日志:

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形式)

在本周的学习过程中,通过对实验的编写对异常处理和断言掌握的比较好,但对日志的部分比较陌生,很多代码不理解,而且网络对相关部分的解释也比较少。

 

posted @ 2017-10-22 21:43  鱼梦  阅读(203)  评论(1编辑  收藏  举报