20145129 《Java程序设计》第5周学习总结

教材学习内容总结

  • 语法与继承架构

    • 使用try、catch

      • Java中所有错误都会被打包为对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理。
      • 运用try、catch,在错误发生时显示更友好的错误信息。
      • 错误在捕捉处理后,尝试恢复程序正常执行流程。
    • 异常继承架构
      • 错误会被包装为对象,这些对象是可抛出的,因此设计错误对象都继承自java.lang.Throwable类。
      • Throwable定义了取得错误信息堆栈追踪等方法,它有两个子类:java.lang.Error与java.lang.Exception。
      • Error与其子类实例代表严重系统错误,如硬件层面错误、JVM错误或内存不足等问题。虽可以使用try、catch处理,但并不建议,发生严重错误时,Java应用程序本身是无力回复的。
      • 程序设计本身的错误,建议使用Exception或其子类实例来表现,所以通常称错误处理为异常处理。
      • 单就语法与继承构架上来说,如果某个方法声明会抛出Throwable或子类实例,只要不是属于Error、java.lang.RuntimeException或其子类实例,就必须明确使用try、catch语法处理,或者使用throws声明这个方法会抛出异常,否则编译失败。
      • IOException是Exception的直接子类,所以编译程序要求明确使用语法加以处理。
      • 受检异常:Exception或其子对象,但非属于RuntimeException或其子对象。
      • 非受检异常:属于RuntimeException衍生出来的类实例,代表API设计者实现某方法时,某些条件成立时引发错误,而且认为API客户端应该在调用方法前做好检查,避免引发错误,编译程序不会强迫一定得在语法上加以处理。
      • catch括号中列出的异常不能有异常关系,否则会发生编译错误。
    • 要抓还是要拋
      • 若抛出受检异常表示认为客户端有能力且应处理异常,此时必须在方法上使用throws声明。
      • 若抛出非受检异常表示认为客户端调用方法的时机出错了,要求客户端修正这个漏洞再来调用方法,此时就不使用throws声明。
      • throws声明部分会是API操作接口的一部分,客户端不用查看原始代码,从API文件上就能直接得知,该方法可能抛出哪些异常。
    • 贴心还是造成麻烦
      • Java是唯一采用受检异常的语言,这有两个目的:一、文件化,受检异常声明会是API操作接口的一部分,客户端只需要查阅文件就可以知道方法可能引发哪些异常,并事先加以处理;二、提供编译程序信息,让编译程序能够在编译时期就检查出API客户端没有处理的异常。
      • 自定义异常类别时,可以继承Throwable、Error、Exception的相关子类,通常建议继承自Exception或其子类,如果不是继承自Error或RuntimeException,那么就会是受检异常。
    • 认识堆栈追踪
      • 查看堆栈追踪可以直接调用异常对象的printStackTrace(),调用后可以在控制台显示堆栈追踪。显示信息中最顶层是异常根源,以下是调用方法顺序。
      • 若想取得个别的堆栈追踪元素进行处理,则使用getStackTrace(),这会返回StackTraceElement数组,数组中索引0为异常根源的相关信息,之后为各方法调用中的信息。
      • 在捕捉异常后什么都不做或是对异常做了不适当的处理,这样的程序代码会对应用程序维护造成严重伤害。
      • 若想要让异常堆栈起点为重抛异常的地方,使用fillInStackTrace()方法。
    • 关于assert
      • 程序执行的某个时间点或某个情况下,必然处于或不处于何种状态,这是一种断言。
  • 异常与资源管理
    • 使用finally

      • try、catch语法可以搭配finally,无论try区块中有无发生异常,若撰写有finally区块,则finally区块一定会被执行。
      • 如果程序撰写的流程中先return了,而且也有finally区块,那finally区块会先执行完后,再将值返回。
    • 自动尝试关闭资源
      • 想要尝试关闭资源的对象,是撰写在try之后的括号中,如果无需catch处理任何异常,可以不用撰写,也不用撰写finally自行尝试关闭资源。
      • 若一个异常被catch后的处理过程引发另一个异常,通常会抛出第一个异常作为响应,addSuppressed()方法是JDK7在java.lang.Throwable中新增的方法,可将第二个异常记录在第一个异常中。
      • 使用自动尝试关闭资源语法时,并不影响对特定异常的处理。
    • java.lang.AutoCloseable接口
      • JDK7的尝试关闭资源语法可套用的对象,必须操作java.lang.AutoCloseable接口。
      • AutoCloseable定义了close()方法。
      • 只要操作AutoCloseable接口,就可以套用至尝试关闭资源语法。
  • 使用Collection收集对象
    • 认识Collection架构

      • 收集对象的共同行为定义在Collection中。既然可以收集对象,也要能逐一取得对象,这就是java.lang.Iterable定义行为,它定义了iterator()方法返回java.util.Iterator操作对象,可以逐一取得对象。
    • 具有索引的List
      • List是一种Collection ,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList。
      • List定义了许多索引操作的方法。
      • ArrayList特性: 有个可指定容量的构造函数,在大致知道将收集的对象范围,可事先建立足够长度的内部数组。
      • LinkedList特性: LinkedList在操作List接口时,采用了链接结构。若收集对象经常会有变动索引的情况,考虑链接方式操作的List比较好,像是随时会有客户登录或注销的客户端List,使用LinkedList会有比较的好的效率。
    • 内容不重复的Set
      • 同样是收集对象,在收集过程中若有相同对象,则不再重复收集,此时可以使用Set接口的操作对象。
      • 判断对象是否重复时,都会调用hashCode()与equals()方法,建议两个方法同时使用。
    • 支持队列操作的Queue
      • 使用Queue接口的操作对象可以使收集对象以队列方式,收集的对象加入至尾端,取得对象时从前段。
      • Queue定义了自己的offer()、poll()与peek()等方法。
      • add()、remove()、element()等方法操作失败时会抛出异常,而offer()、poll()与peek()等方法操作失败时会返回特定值。
      • 如果对象操作有Queue,并打算以队列方式使用,且队列长度受限,通常建议使用offer()、poll()与peek()等方法。
      • offer()用于在队列后端加入对象,成功返回true,失败返回false。
      • poll()用于取出队列前段对象,若队列为空则返回null。
      • peek()用于取得(但不取出)队列前段对象,若队列为空则返回null。
    • 使用泛型
      • 在设计API时可以指定类或方法支持泛型,使用API的客户端在语法上会更为简洁,并得到编译时期检查。
      • 使用定义类型,在需要编译程序检查类型的地方,都可以使用E像是add()方法必须检查传入的对象类型是E,get()方法必须转换为E类型。
      • 声明与建立对象时,可使用角括号告知编译程序,这个对象收集的都会是String,而取回之后也会是String,不用再使用括号转换类型。
      • 泛类型可以定义在方法上,最常见的是在静态方法上定义泛型。
    • 简介Lambda表达式
      • Lambda表达式的语法省略了接口类型与方法名称,->左边是参数列,右边是方法本体,编译程序可以由Request request 的声明中得知语法上被省略的信息。
      • 使用Lambda表达式,编译程序在推断类型时,还可以用泛型声明的类型作为信息的来源。
      • 重复的信息多了,改用Lambda语法来实现,加上编译程序的类型推断能力辅助。
      • 如果流程复杂,无法在一行的Lambda表达式中写完时,可以使用区块符号{}包括演算流程。在使用区块时,如果方法必须返回值,在区块中就必须使用return。
    • Interable与Iterator
      • iterator()方法定义在Collection接口中,List、Set、Queue继承自Collection,所以都拥有iterator()的行为。
      • iterator()方法会返回java.util.Iterator接口的操作对象,这个对象包括了Collection收集的所有对象,可以使用Iterator的hasNext()看有无下一个对象,有的话,再使用next()取得下一个对象。
    • Comparable与Comarater
      • 操作Comparable

        • Collections的sort()方法在取得a对象与b对象进行比较时,会先将a对象扮演为Comparable(也因此若对象没有操作Comparable,将会抛出ClassCastException),然后调用a.compareTo(b),如果a对象顺序上小于b对象则返回小于0的值,若顺序上相等则返回0,若顺序上a大于b则返回大于0的值。
      • 操作Comarater
        • Comarater的compare()会传入两个对象,如果o1顺序上小于O2则返回小于0的值,相等则返回0,否则返回大于0的值。
        • 在Java的规范中,与顺序有关的行为,通常要不对象本身是Comarable,要不就是另行指定Comarator对象告知如何排序。
        • set的操作类之一java.util.TreeSet,不仅拥有收集不重复对象的能力,还可以用红黑树方式排序收集的对象,条件是收集的对象必须是Comarable(否则会抛出ClassCastException),或者是在创建TreeSet时指定Comparator对象。
        • Queue的操作类之一java.util.PriorityQueue也是,收集至PriorityQueue的对象,会根据你指定的优先权来决定对象在队列中的顺序,优先权的告知,要不就是对象必须是Comparable,或者是创建PriorityQueue时指定Comparator对象。
        • reverseOrder()返回的Comparator会是Comparable对象上定义顺序的反序。
  • 键值对应的Map
    • 常用Map操作类

      • 常用的Map操作类为java.util.HashMap与java.util.TreeMap,其继承自抽象类java.util.AbstractMap。
      • 使用HashMap:在HashMap中建立键值对应之后,键是无序的。
      • 使用TreeMap:如果使用TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Comparable接口,或者是创建TreeMap时指定操作Comparator接口的对象。
      • 使用Properties:Properties类继承自HashTable,HashTable操作了Map接口,Properties自然也有Map行为。Properties的=左边设定属性名称,右边设定属性值。可以使用Properties的load()方法指定InputStream实例。load()方法结束后会自动关闭InputStream实例。
    • 访问Map键值
      • 若想取得Map中所有的键,可以调用Map的keySet()返回Set对象。
      • 若想同时取得Map的键与值,可以使用entrySet()方法,这会返回一个Set对象,每个元素都是Map.Entry实例,可以调用getKey()取得键,调用getValue()取得值。
      • Map没有继承Iterable,有个forEach()方法是定义在Map接口上,可使用这个方法结合Lambda表达式,在迭代键与值时获得不错的可读性。

教材学习中的问题和解决过程

对本章学习内容没有太大问题。

代码调试中的问题和解决过程

书上代码还在学习目前没有问题,总体把书上的知识点看了一遍。

代码上传。http://git.oschina.net/l_cat_1/codes

其他(感悟、思考等,可选)

在这次学习中我认为可以采用先过一遍知识点和代码,再去实践编写程序这样书上的内容就可以过两遍加深印象,也可以明确重点程序并重点学习,为课后习题打基础。

学习进度条

| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长| | -------- | ----------------|----------------|--------------- |-----| | 目标 | 3000行 | 15篇 | 300小时 | | | 第一周 | 50/50 | 2/2 | 14/14 | | 第二周 | 100/150 | 1/3 | 10/24 | | 第三周 | 300/450 | 1/4 | 15/39 | | 第四周 | 350/800 | 1/5 | 50/74 | | 第五周 | 200/1000 | 1/6 | 30/104 |

20145129 《Java程序设计》第5周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. Razor视图引擎 语法

  2. xcode不能连接svn以及不能导入的解决方法

    配置svn的方法不多说,网上一堆.这里要说的是怎么解决连接不上svn以及在xcode中不能修改svn目录的问题.   首先,xcode连接不上linux的svn,一般来说,问题就出在端口上.svn的默 ...

  3. 自动计算尺寸列表功能案例ios源码

    源码HTKDynamicResizingCell,HTKDynamicResizingCell提供自动计算尺寸的TableViewCell/CollectionViewCel,只要设置了合适AutoL ...

  4. Android数据库(sqlite)加密方案

    最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加 ...

  5. CentOS学习笔记--JDK安装

    JDK安装 大部分的服务都离不开JAVA环境,CentOS里都是OpenJDK,显然我们还是使用JAVA的JDK好.(注:minimal版没有安装OpenJDK,其它版本需要删除这个.) JDK下载 ...

  6. DPDK多核多线程机制简析

    DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能. DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递 ...

  7. WinForm程序安装、发布流程

    一  签名 所谓签名就是给应用程序一个身份,申请一个专利.签名的时候需要选择证书.就向我们上学一样,得奖了老师给你发个证书.如果不进行签名,杀毒软件会把你打包后的exe文件作为病毒处理. 签名的步骤: ...

  8. Log4net使用笔记

    Log4net使用笔记   编写人:CC阿爸 2013-10-29 近来在处理项目时候,想将系统的操作日志以文本的形式记录下来,方便对系统操作记录进行追踪. 经过在网上搜索部分解决方案,大致可以归纳如 ...

  9. STM32F0xx_DAC输出电压配置详细过程

    前言 数模转换DAC的功能在现实应用中所占的分量,相对定时器TIM.串口USART等要小的多,这也是ST为什么内部集成DAC模块相对来说不是那么多的原因.但在有需要使用数模转换功能的项目中,自带的这个 ...

  10. 【微网站开发】之微信内置浏览器API使用

    最近在写微网站,发现了微信内置浏览器的很多不称心的地方: 1.安卓版的微信内浏览器底部总是出现一个刷新.前进.后退的底部栏,宽度很大,导致屏幕显示尺寸被压缩 2.分享当前网站至朋友圈时,分享的图片一般 ...