201453408刘昊阳 《Java程序设计》第5周学习总结
201453408刘昊阳 《Java程序设计》第5周学习总结
教材学习内容总结
第8章 异常处理
8.1 语法与继承结构
8.1.1 使用try
、catch
- p227代码(Average)
- 所有错误都会被打包成对象,可以尝试
try
捕捉catch
代表错误的对象后做一些处理 - p228代码(Average2)
- 虚拟机尝试执行
try
区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch
括号中声明的类型,是否符合被抛出的错误对象类型,如果是的话,就执行catch
区块的程序代码 - p229代码(Average3)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/TryCatchAverage3?oid=ba0ff5c192e00ed62a8e86efab81c98977be3dea
输入错误后,通过
console.next()
取得错误的字符输出后并输出平均值8.1.2 异常继承架构
- 错误会被包装成对象,这些对象都是可抛出的(
throw
),因此设计错误对象都继承至java.lang.Throwable
类,Throwable
定义了取得错误信息、堆栈追踪等方法,他有两个子类java.long.Error
、java.lang.Exception
Error
与其子类实例代表严重系统错误(硬件层面错误,JVM错误或者内存不足),不建议用try
、catch
来处理Error
对象,Java应用程序本身无力回复Exception
或其子类实例可以表现程序设计本身的错误,称错误处理为“异常处理”
- 如果某个方法声明会抛出
Throwable
或其子类实例。只要是不属于java.lang.RuntimeException
、Error
及其子类实例,就必须使用try
、catch
语法,或throws
声明 - 受检异常:
Exception
或其子对象,但不属于RuntimeException
或其子对象 - 非受检异常(执行时期异常):
RuntimeException
衍生的类实例,应该在调用方法前做好检查,编译程序不会强迫一定在语法上进行修改 - p233代码(Average4)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/TryCatchAverage4?oid=72a40b5715d6edf4ad1fdda30e52bfb7c2e970df
- 取得用户输入的字符串后,检查其是否为数字格式,是转换为
int
型,不是提醒用户重新输入
- 使用
try
、catch
捕捉异常对象时,如果父类异常对象在子类异常对象前被捕捉,catch
子类异常对象的区块将永远不被执行,编译程序会检查出错误,完成编译必须更改异常对象捕捉顺序 多重捕捉:
cath( | | )
会在发生多种异常时执行,但括号中列出的异常不得有继承关系8.1.3 要抓还是要抛
FileInputStream
可指定档名来开启与读取文档内容,是InputStreaam
的子类,可用作创建Scanner
- 方法设计流程中发生异常,设计时没有充足信息知道如何处理,可以抛出异常让客户端处理
throws
:由方法的客户端依据当时的调用环境信息进行处理受检异常,用throws
声明此方法会抛出的异常类型或父类型- p236代码(FileUtil)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/FileUtil?oid=fa03dff7b2edc52b48ef41a4027f2138b615d670
- 先处理部分事项再抛出(在
throws
里用try
、catch
再在任何流程中使用throw
将异常再抛出)- 在流程中抛出异常就直接跳离原有的流程
- 抛出受检异常,认为客户端能处理异常,必须在方法上使用
throws
声明 - 抛出非受检异常,认为客户端调用方法时机出错,抛出异常要求客户端修改漏洞再来调用方法
- 托管地址
- 使用继承,父类的某个方法声明
throws
某些异常,子类重新定义该方法时可以 - 不声明
throws
任何异常 throws
父类该方法中声明的某些异常throws
父类该方法中声明异常的子类- 不可以
throws
父类方法中未声明的其他异常throws
父类方法中声明异常的父类8.1.4 贴心还是造成麻烦
- 可以考虑为应用程序自定义专属异常类别,可以继承
Throwable
、Error
或Exception
的相关子类,通常建议继承自Exception
或其子类,如果不是继承自Error
或RuntimeException
,那么就会是受检异常 开发者需要思考,一场是客户端可以处理的异常,还是客户端没有准备好前置条件就调用方法引发的异常
8.1.5 认识堆栈追踪
- 堆栈追踪:想得知异常发生的根源,以及多重方法调用下异常的堆栈传播,可以利用异常对象自动收集的堆栈追踪
- 堆栈追踪最简单的方式是直接调用异常对象的
printStackTrace()
- p240代码(StackTraceDemo)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/StackTraceDemo?oid=43c40bfa44b74a9c08bf05b44d72fbeadca61478
- 异常发生被捕捉后,调用
printStackTrace()
在控制台显示堆栈追踪 - 堆栈追踪信息中显示了异常信息,最顶层是异常的根源,以下是调用方法的顺序
- 使用
javac
编译时指定-g:none
自变量就不会记录出错信息 getStackTrace()
:取得个别的堆栈追踪元素进行处理,返回StackTraceElement
数组- 善用堆栈追踪,程序代码中不可以有私吞异常的行为,捕捉异常后什么都不做或者对异常做了不适当的处理或者显示了不正确的信息
- 使用
throw
重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,不是重抛异常的地方 - p242代码(StackTraceDemo2)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/StackTraceDemo?oid=43c40bfa44b74a9c08bf05b44d72fbeadca61478
fillStackTrack()
方法:让异常堆栈起点为重抛异常的地方,会重新装填异常堆栈,将起点设为重抛异常的地方,返回Throwable
对象8.1.6 关于
assert
assert
- 程序执行的某种情况下,必然处于或不处于何种状态下
- 使用语法
assert boolean_expression
:boolean_expression
为true
,什么事都不会发生,为false
,会发生java.lang.AssertionError
assert boolean_expression : detail_expression
:将detail_expression
的结果显示出来,对象调用toString()
显示文字描述结果
- 启动断言检查,执行
java
指令时,指定-enableassertions
或-ea
自变量 - 使用断言
- 调用方法前,已经准备好某些前置条件
- 调用方法前,具有方法承诺的结果
- 断言对象某个时间点下的状态
- 使用断言取代批注
断言程序流程中绝对不会执行到的程序代码部分
8.2 异常与资源管理
8.2.1 使用
finally
finally
:可以搭配try
、catch
语法使用,无论try
区块中有无发生异常,finally
区块一定会被执行- p248代码(FinallyDemo)
- 地址
程序先
return
,而且也有finally
区块,会先执行finally
区块,再将值返回8.2.2 自动尝试关闭资源
- 尝试关闭资源语法
想要尝试自动关闭资源的的对象,是撰写在
try
之后的括号中,如果无须catch
处理任何异常,可以不用撰写,也不用撰写finally
自行尝试关闭资源8.2.3 java.lang.AutoCloseable接口
- 尝试关闭资源语法可套用对象,必须操作
java.lang.AutoCloseable
接口 - p253代码(AutoClosableDemo)
- 地址
- 只要操作
AutoCloseable
接口,就可以套用至尝试关闭资源语法,可以同时关闭两个以上的资源对象,中间以分号分隔 - p253代码(AutoClosableDemo2)
- 地址
try
括号中越后面撰写的对象会越早被关闭第9章
Collection
与Map
9.1 使用
Collection
收集对象9.1.1 认识
Collection
架构收集对象的共同行为定义在
Collection
中9.1.2 具有索引的
List
List
是一种Collection
,其作用类之一是java.util.arrayList
- p264代码(Guest)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/CollectionGuest?oid=522d52e5efbf8018678417cf85863b8b0f72f4e2
ArrayList
特征- 使用数组特性
LinkedList
特性采用链接结构
9.1.3 内容不重复的
Set
Set
接口:在收集过程中若有相同的对象,则不再重复收集,可以使用Set
接口的操作对象- p26代码(WordCount)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/WordCount?oid=beaad7c049f9ddca8c24a656ab112bac71b72169
- p269代码(Students)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/Student?oid=5616d493b86aab13c95b0abe7492114bd909bf13
- 哈希桶:在内存中开设空间,每个空间里都有哈希函数,对象要加入
HashSet
,则会调用对象的hashCode()
取得哈希码并尝试放入对应号码的哈希桶中,调用equals
判断两个对象是否相同是否予以收集 - p270代码(Students2)
-
9.1.4 支持队列操作的
Queue
Queue
接口:收集对象时以队列方式,收集的对象加至尾端,取得对象从前端,可以使用Queue
接口的操作对象,继承自Collection
Queue
定义了自己的offer()
、poll()
、peek()
方法,操作失败会返回特定值offer()
在队列后端加上对象,成功返回true
,失败返回false
poll()
取出队列前端对象,,队列为空返回null
peek()
取得但不取出队列前端对象,队列为空返回null
- p272代码(RequestQueue)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/RequestQueue?oid=4b8a53007d44a88a6a085ee0be415d78f70ff64dc5
deque
:Queue
的子接口,定义了对队列的前端和尾段进行操作java.util.Arraydeque
操作了Deque
接口使用
ArrayDeque
操作容量有限的堆栈9.1.5 使用泛型
- p275代码(ArrayList)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/CollectionArrayList?oid=f54bde5fd8e8361c004dd71458646337917ed6ab
- 类名称旁边
<E>
,表示支持泛型(客户端声明的E类型) - 不指定
T
的实际类型,那么T
出现的位置就回归为使用Object
声明参考时有指定类型,创建对象时就不用再写类型了
9.1.6 简介
Lambda
表达式Lambda
表达式:Request request = ()-> out.ptinf("处理数据%f%n",Math.random() )
- 相对于匿名类语法,省略了接口方法和方法名称,
->
左边是参数列,右边是方法本体 - p280代码(RequestQueue2)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/RequestRequest2?oid=00fac829a2b57ca61ddd2c295d73b76613902bc5
可以用{}包括演算流程,若果方法必须返回值,在区块中就必须使用
return
9.1.7
Interable
与Iterator
iterator()
方法:返回java.util.Iterator
接口的操作对象,包括了Collection
收集的所有对象,利用iterator()
的hasNext()
看看有无下一对象,用iterator()
的next
取得下一对象- p283代码(ForEach)
-
9.1.8
Comparable
与Comparator
- p284代码(Sort)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/Sort?oid=4909b678872e522e3f638cc0f3ae59b6e3a16508
- p285代码(Sort2)
- http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/Sort2?oid=91f2f7bf8afe484ae74f1710242e788def373730
- 操作
Comparable
Collections
的Sort()
方法在取得a对象与b对象进行比较时,会先将a对象扮演为Comparale
,然后调用a.compareTo(b)
,a对象顺序小于b对象返回小于0的值,相等返回0,大于返回大于0的值- 操作
Comparator
java.util.Arrays
的Sort()
方法,针对对象排序有两种版本:收集在数组中的数据必须是Comparable
,或者可以传入Comparator
指定排序方式reverseOder()
返回的Comparator
会是Comparable
对象上定义顺序的反序,nullsFirst()
接受Comparator
在其定义顺序上加上让null
排在最前面的规则9.2 键值对应的
Map
事先利用
java.util.Map
接口的操作对象来建立键值对应的数据9.2.1 常用
Map
操作类- 使用
HashMap
- 建立键值,使用
put()
方法,指定键取回对应的值,使用get()
方法 - 使用
TreeMap
- 让键有序,键的部分会排序
- 作为键的对象必须操作
Comparable
接口,或者在创建TreeeMap
时指定操作Comparator
接口的对象 - 使用
Properties
Properties
有Map
接口和Hashtable
父类的行为setProperty()
指定字符串类型的键值,getProperty()
指定字符串类型的键,取回字符串类型的值使用
System
的static
方法getProperties()
取得properties
实例9.2.2 访问
Map
键值KeySet()
:取得Map
所有的键,调用Map
的KeySet()
返回Set
对象Values()
:取得map
中所有的值,可以使用values()
返回Collection
对象entrySet()
:同时取得Map
的键与值,返回一个Set
对象,每个元素都是Map.Entry
实例,可以调用getkey()
取得键,调用getValue()
取得值
教材学习中的问题和解决过程
- 问题:各种异常间的关系
- 解决过程:
Error
(严重系统错误) 受检异常(客户端有能力处理):Exception
非受检异常(未在恰当时机调用方法):RuntimeException
代码调试中的问题和解决过程
问题:p264代码(Guest),代码运行时输入小写英文字母,会自动转换成大写字母
解决过程:猜想应该与作用类的定义有关,具体因为什么还没搞清楚
其他(感悟、思考等,可选)
本周学习时间比较紧,感觉到Java学到现在,基本语法现在已经逐步讲完,开始侧重于不同的常用API和其他需要掌握的地方,学会利用可下载的代码调试,可以加快学习效率
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 30/30 | 1/2 | 16/16 | 基本知识 |
第二周 | 100/130 | 1/3 | 18/38 | 基本语法 |
第三周 | 100/230 | 1/4 | 22/60 | 对象封装 |
第四周 | 300/530 | 1/5 | 30/90 | 继承接口 |
第五周 | 300/830 | 1/6 | 30/120 | 异常与Collection、Map |
201453408刘昊阳 《Java程序设计》第5周学习总结的更多相关文章
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- Android -- android.os.Parcelable[] cannot be cast to ...
我本想直接把Bunde.getParcelableArray(...)得到的Parcelable[]强制转换为自定义类数组,但是失败了,网上找了两种解决办法: Parcelable[] data =b ...
- Q3 2016 State of the Internet – Security Report
https://content.akamai.com/PG7476-Q3-2016-SOTI-Security-Report.html?utm_source=GoogleSearch&gcli ...
- HTML5学习之WebSocket通讯(六)
WebSocket是下一代客户端-服务器的异步通信方法. WebSocket最伟大之处在于服务器和客户端可以在任意时刻相互推送信息 WebSocket允许跨域通信 Ajax技术需要客户端发起请求,We ...
- MongoDB的介绍和使用场景(1)
MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSQL 数据库产品中最热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用 C++开发.M ...
- Delphi的属性Property
参考:http://www.cnblogs.com/edisonfeng/archive/2012/05/22/2513727.html 一.基本属性 TOnUserInfoShow = proced ...
- 【翻译二十三】java-并发程序之随机数和参考资料与问题(本系列完)
Concurrent Random Numbers In JDK 7, java.util.concurrent includes a convenience class, ThreadLocalRa ...
- 攻城狮在路上(壹) Hibernate(十六)--- Hibernate声明数据库事务
一.数据库事务的概念: 数据库的ACID特征:Atomic.Consistency.Isolation.Durability.原子性.一致性.隔离性.持久性.不同的隔离级别引发的不同问题. 事务的AC ...
- .NET NLog 详解(一)
安装NLog NLog 的源代码托管在Github 上,一般的人直接使用NuGet就可以了. 这里我们选择安装NLog.Config.当然最方便的还是直接使用命令行: Install-Package ...
- hdu 5294 最短路+最大流 ***
处理处最短路径图,这个比较巧妙 链接:点我
- java 存储对象
一.存储区域: 1)寄存器.这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何 ...