201453408刘昊阳 《Java程序设计》第5周学习总结

教材学习内容总结

第8章 异常处理

8.1 语法与继承结构

8.1.1 使用trycatch
  • p227代码(Average)

  • 所有错误都会被打包成对象,可以尝试try捕捉catch代表错误的对象后做一些处理
  • p228代码(Average2)
  • 虚拟机尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是的话,就执行catch区块的程序代码
  • p229代码(Average3)
  • 错误会被包装成对象,这些对象都是可抛出的(throw),因此设计错误对象都继承至java.lang.Throwable类,Throwable定义了取得错误信息、堆栈追踪等方法,他有两个子类java.long.Errorjava.lang.Exception
    • Error与其子类实例代表严重系统错误(硬件层面错误,JVM错误或者内存不足),不建议用trycatch来处理Error对象,Java应用程序本身无力回复
    • Exception或其子类实例可以表现程序设计本身的错误,称错误处理为“异常处理”
  • 如果某个方法声明会抛出Throwable或其子类实例。只要是不属于java.lang.RuntimeExceptionError及其子类实例,就必须使用trycatch语法,或throws声明
  • 受检异常:Exception或其子对象,但不属于RuntimeException或其子对象
  • 非受检异常(执行时期异常):RuntimeException衍生的类实例,应该在调用方法前做好检查,编译程序不会强迫一定在语法上进行修改
  • p233代码(Average4)
  • 使用trycatch捕捉异常对象时,如果父类异常对象在子类异常对象前被捕捉,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里用trycatch再在任何流程中使用throw将异常再抛出)
    • 在流程中抛出异常就直接跳离原有的流程
    • 抛出受检异常,认为客户端能处理异常,必须在方法上使用throws声明
    • 抛出非受检异常,认为客户端调用方法时机出错,抛出异常要求客户端修改漏洞再来调用方法
  • 托管地址
  • 使用继承,父类的某个方法声明throws某些异常,子类重新定义该方法时可以
  • 不声明throws任何异常
  • throws父类该方法中声明的某些异常
  • throws父类该方法中声明异常的子类
  • 不可以
  • throws父类方法中未声明的其他异常
  • throws父类方法中声明异常的父类

    8.1.4 贴心还是造成麻烦
  • 可以考虑为应用程序自定义专属异常类别,可以继承ThrowableErrorException的相关子类,通常建议继承自Exception或其子类,如果不是继承自ErrorRuntimeException,那么就会是受检异常
  • 开发者需要思考,一场是客户端可以处理的异常,还是客户端没有准备好前置条件就调用方法引发的异常

    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_expressionboolean_expressiontrue,什么事都不会发生,为false,会发生java.lang.AssertionError
    • assert boolean_expression : detail_expression:将detail_expression的结果显示出来,对象调用toString()显示文字描述结果
  • 启动断言检查,执行java指令时,指定-enableassertions-ea自变量
  • 使用断言
  • 调用方法前,已经准备好某些前置条件
  • 调用方法前,具有方法承诺的结果
  • 断言对象某个时间点下的状态
  • 使用断言取代批注
  • 断言程序流程中绝对不会执行到的程序代码部分

    8.2 异常与资源管理

    8.2.1 使用finally
  • finally:可以搭配trycatch语法使用,无论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章 CollectionMap

    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
  • dequeQueue的子接口,定义了对队列的前端和尾段进行操作
  • 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 InterableIterator
  • 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 ComparableComparator
  • 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
  • CollectionsSort()方法在取得a对象与b对象进行比较时,会先将a对象扮演为Comparale,然后调用a.compareTo(b),a对象顺序小于b对象返回小于0的值,相等返回0,大于返回大于0的值
  • 操作Comparator
  • java.util.ArraysSort()方法,针对对象排序有两种版本:收集在数组中的数据必须是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
  • PropertiesMap接口和Hashtable父类的行为
  • setProperty()指定字符串类型的键值,getProperty()指定字符串类型的键,取回字符串类型的值
  • 使用Systemstatic方法getProperties()取得properties实例

    9.2.2 访问Map键值
  • KeySet():取得Map所有的键,调用MapKeySet()返回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周学习总结的更多相关文章

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

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

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

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

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

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

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

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

  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. Android -- android.os.Parcelable[] cannot be cast to ...

    我本想直接把Bunde.getParcelableArray(...)得到的Parcelable[]强制转换为自定义类数组,但是失败了,网上找了两种解决办法: Parcelable[] data =b ...

  2. Q3 2016 State of the Internet – Security Report

    https://content.akamai.com/PG7476-Q3-2016-SOTI-Security-Report.html?utm_source=GoogleSearch&gcli ...

  3. HTML5学习之WebSocket通讯(六)

    WebSocket是下一代客户端-服务器的异步通信方法. WebSocket最伟大之处在于服务器和客户端可以在任意时刻相互推送信息 WebSocket允许跨域通信 Ajax技术需要客户端发起请求,We ...

  4. MongoDB的介绍和使用场景(1)

    MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSQL 数据库产品中最热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用 C++开发.M ...

  5. Delphi的属性Property

    参考:http://www.cnblogs.com/edisonfeng/archive/2012/05/22/2513727.html 一.基本属性 TOnUserInfoShow = proced ...

  6. 【翻译二十三】java-并发程序之随机数和参考资料与问题(本系列完)

    Concurrent Random Numbers In JDK 7, java.util.concurrent includes a convenience class, ThreadLocalRa ...

  7. 攻城狮在路上(壹) Hibernate(十六)--- Hibernate声明数据库事务

    一.数据库事务的概念: 数据库的ACID特征:Atomic.Consistency.Isolation.Durability.原子性.一致性.隔离性.持久性.不同的隔离级别引发的不同问题. 事务的AC ...

  8. .NET NLog 详解(一)

    安装NLog NLog 的源代码托管在Github 上,一般的人直接使用NuGet就可以了. 这里我们选择安装NLog.Config.当然最方便的还是直接使用命令行: Install-Package ...

  9. hdu 5294 最短路+最大流 ***

    处理处最短路径图,这个比较巧妙 链接:点我

  10. java 存储对象

    一.存储区域: 1)寄存器.这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何 ...