201453408刘昊阳 《Java程序设计》第5周学习总结
2016-04-03 08:34
399 查看
201453408刘昊阳 《Java程序设计》第5周学习总结
教材学习内容总结
第8章 异常处理
8.1 语法与继承结构
8.1.1 使用try、
catch
p227代码(Average)
http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/Average?dir=0&filepath=Average&oid=81ad0a5f5403ce540407071cc94fe2efc9402832&sha=6e96a227632c67d259a5c1073859bc3df6c5e9c2
InputMismatchException错误信息表示不符合
scanner预期对象
所有错误都会被打包成对象,可以尝试
try捕捉
catch代表错误的对象后做一些处理
p228代码(Average2)
http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/TryCatch%20Average2?oid=b7ae12a15194fe57cc717cfbda4f6c1bbd0af10e
虚拟机尝试执行
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)
http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/Student2?oid=5192f51c5079580a532ed3a2c2b0b9aaf0c733a3
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)
http://git.oschina.net/yg1022/java-besti-is-2015-2016-2-20145308/blob/master/ForEach?oid=8af1477d527a319cb9247fccd8abdb920071750b
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 |
相关文章推荐
- day01-SpringMVC+Spring+Mybatis+Mavan+SVN环境搭建及测试
- 电商平台学习笔记(四)——Spring配置Mybatis简化DAO层省略Mybatis核心配置文件
- 电商平台学习笔记(一)——Spring MVC+Mybatis分页插件
- 电商平台学习笔记(一)——Spring MVC+Mybatis分页插件
- JVM学习笔记(一)——eclipse优化
- eclipse编辑器学习笔记(一)——Build Automaticlly
- java虚拟机 jvm 方法区实战
- java虚拟机 jvm 方法区实战
- spring @Qualifier注解使用
- 深入浅出讲Java
- Java位操作全面总结[ZZ]
- SpringMVC中时间数据格式问题
- 关于java mail 发邮件的问题总结(转)
- 深入理解Java回调函数
- Unable to open debugger port (localhost:8617): java.net.ConnectException "连接超时"
- 解决Java中MD5加密utf-8格式时与其他语言不同的问题
- spring @Qualifier注解使用
- JavaWeb相对路径
- 单例模式在spring的应用
- 利用Javamail接收QQ邮箱和Gmail邮箱(转)