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

教材学习内容总结

第八章 异常处理

一、语法与继承架构

(一)使用try、catch

  • 执行流程

    1. 尝试执行try区块中程序代码
    2. 如果出现错误,执行流程跳离错误发生点
    3. 比较catch区块中声明的类型,如果符合被抛出的错误对象类型,就执行catch区块的代码。

    范例Average

    • 运行结果

    范例Average2

    • 运行结果

  • 意义:针对错误做一些处理,可以恢复正常流程,进行日志记录等。

    范例Average3

    • 运行结果

(二)异常继承架构

  1. 错误对象都继承自java.lang.Throwable类,其有两个子类:java.lang.Error与java.lang.Exception。

  2. Error与其子类实例代表严重系统错误,基本不用处理,最多留下日志信息。

  3. Exception与其子类实例代表程序设计本身的错误。

    范例Average4

    • 运行结果

  4. 子类异常对象应该在父类异常对象前被捕捉,否则子类异常对象的区块将永远不会被执行。

  5. 多重捕捉中,catch括号中列出的异常不能有继承关系,否则会发生编译错误。

(三)要抓还是要抛

  1. throws:自己无法处理,用在方法声明。

  2. throw:方法中跑出Checked Exception,方法声明中必须有throws。

    范例FileUtil

(四)贴心还是造成麻烦

(五)认识堆栈追踪

  1. 直接调用异常对象的printStackTrace(),是常看堆栈追踪的最简单方法。

    范例StackTraceDemo

    • 运行结果

  2. 使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,不是重抛异常的地方。

    范例StackTraceDemo2

    • 运行结果

  3. 使用fillInStackTrace()方法,可以重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象。

    范例StackTraceDemo3

    • 运行结果

(六)关于assert

  • 使用断言的时机
  1. 如果程序上线后不需要checkGreatThanZero()检查,可用assert取代。
  2. 一定不能有default时,也可用assert来取代。

二、异常与资源管理

(一)使用finally

  • 利用finally区块一定会被执行的特点,可以在finally区块中调用close()方法,避免资源不被关闭。

    范例FinallyDemo

    • 运行结果

(二)自动尝试关闭资源

  • JDK7之后,想要尝试自动关闭的资源,可以撰写在try之后的括号中。

    范例FileUtile2

(三)java.lang.AutoCloseable接口

  1. JDK7尝试关闭资源语法可套用的对象,必须操作java.lang.AutoCloseable接口。

    范例AutoClosableDemo

    • 运行结果

  2. 同时关闭两个以上的资源,只需要以分号分隔,越后面的越先关闭。

    范例AutoClosableDemo2

    • 运行结果

第九章 Collection与Map

一、使用Collection收集对象

(一)认识Collection架构

  • java.util.Collection:收集对象,如:

    1. add():新增对象
    2. remove():移除对象
  • java.util.Iterable:逐一取得对象,如:
    1. interator():返回操作对象
  • java.util.List:记录每个对象的索引顺序,并可按索引取回对象。
  • java,util.Set:收集对象不重复,且具有集合的行为
  • java.util.queue:收集对象时以队列的方式,收集的对象加入至尾端,取得对象时从前端
  • java.util.Deque:对Queue两端进行加入、移除等操作

(二)具有索引的List

  1. ArrayList特性:根据索引随机存取时速度快,需要调整索引顺序时表现较差。

    范例Guest

    • 运行结果

  2. LinkedList特性:根据索引随机存取对象时较慢,但有利于调整索引顺序。

    出错

(三)内容不重复的Set

  1. Arrays.asList()方法返回List,而List是一种Collection,所以可传给HashSet接受Collection实例的构造函数。

    范例WordCount

    • 运行结果

  2. Java中许多要判断对象是否重复时,会同时调用hashCode()与equals()。

    出错

(四)支持队列操作的Queue

  1. offer()、poll()、peek()等方法操作失败会返回固定值。

    范例RequestQueue

    • 运行结果

  2. Deque是Queue的子接口,定义了对队列的操作。

    范例Stack

    • 运行结果

(五)使用泛型

(六)简介Lambda表达式

  • Lambda表达式的语法省略了接口类型与方法名称,“->”左边是参数列,右边是方法本体。

    范例RequesQueue2

    • 运行结果

(七)Interable和Iterator

  • 增强式for循环可用在数组上,也可用在操作Iterable接口的对象上。

    范例ForEach

    • 运行结果

(八)Comparable与Comoarator

  • 与顺序有关的行为,要么对象本身是Comparable,要么另行指定Comparator对象告知如何排序。
  • 返回值(小于0,等于0或大于0)用来调换排列顺序。

二、键值对应的Map

(一)常用Map操作类

  1. 使用HashMap:键是无序的
  2. 使用TreeMap:键是有序的
  3. 使用Properties:setProperty()指定字符串类型的键值,getProperty()指定字符串类型的键。

(二)访问Map键值

  1. keySet():取得Map中所有键
  2. Values():取得Map中所有值
  3. entrySet():同时取得Map的键和值(调用getKey()取得键,getValue()取得值)

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

  1. 学习8.1.1时,看到try、catch捕捉错误的案例,书中只捕捉了一个错误,当时疑惑如果有多个错误该如何捕捉?
  • 解决:学习到8.1.2时看到书中片段

         try{
    做一些事...
    }catch(IOException | InterruptedException | ClassCastException e) {
    e.printStackTrace();
    }

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

  1. 编写P253的范例后,始终提示错误,检查了好几遍就是觉得写的没错,过两天再查的时候发现try括号中new ResourceSome()缺少了(),ResourceOther other少了other,十分诧异自己当时看了那么多遍,怎么就没看出来这么大的缺漏。。。

  2. 编写P269范例Students的后,最后的set始终显示错误,后来编写到Students2时发现该处应该为students。

  3. 编写270范例Students2时出现很多问题。。。尚未解决

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

听了老师的话,看了学姐辛苦码的心得,我也对自己的博客内容和版式做出一些改进,自己还是希望变得优秀,并且也确实在一点一点进步着的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 15篇 300小时
第一周 70/70 2/2 14/14
第二周 150/220 1/3 18/32
第三周 400/620 1/4 35/67
第四周 850/1470 1/5 30/97
第五周 560/2030 1/6 34/131

参考资料

20145105 《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. PHP MySQL Insert Into

    INSERT INTO 语句用于向数据库表中插入新记录. 向数据库表插入数据 INSERT INTO 语句用于向数据库表添加新记录. 语法 INSERT INTO table_name VALUES ...

  2. poj_3283 trie树

    题目大意 将一副牌进行编号,四种花色分别标记为'C'.'D'.'H'.'S',数值标记为'A'.'1'.'2'.'3'.'4'.'5'.'6'.'7'.'8'.'9'.'10'.'J'.'Q'.'K' ...

  3. 重构(Refactoring)技巧读书笔记(General Refactoring Tips)

    重构(Refactoring)技巧读书笔记 之一 General Refactoring Tips, Part 1 本文简要整理重构方法的读书笔记及个人在做Code Review过程中,对程序代码常用 ...

  4. Map集合中value()方法与keySet()、entrySet()区别 《转》

    在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键 ...

  5. luogu P2066 机器分配[背包dp+方案输出]

    题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...

  6. Linux数据链路层的包解析

    仅以此文作为学习笔记,初学者,如有错误欢迎批评指正,但求轻喷.一般而言,Linux系统截获数据包后,会通过协议栈,按照TCP/IP层次进行解析,那我们如何直接获得更为底层的数据报文呢,这里用到一个类型 ...

  7. .net asp [转载]ASP:循环滚动图片的代码+解释

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. java对象转化成String类型

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object#toString(),(String)要转换的对象,St ...

  9. Mybatis框架插件PageHelper的使用

    在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计 ...

  10. IT求职部分网站汇总

    哪合伙:http://nahehuo.com/ 过来人:http://www.guolairen.com/ 智联:www.zhaopin.com 前程:www.51job.com 中华英才:www.c ...