20145319 《Java程序设计》第五周学习总结
教材学习内容总结
本周学习了教材的第八章、第九章,在经过前几周的学习之后,我们大致了解了java中的基础语法,函数构造调用,以及当以项目为基础设计代码时我们该如何使用继承和接口,对java已有初步了解,因此这两章我们要进一步学习的是如何处理程序中的异常状况。
1. 异常处理语法
- 定义:java中所有错误都会被打包成一个对象,所以可以尝试(try)捕捉(catch)错误对象,并做出相应处理。
- try:多和catch搭配使用,JVM会尝试try区块中的程序代码。如果发生了错误,即立刻跳出错误点,比较catch()中声明的错误类型,如果吻合就执行catch区块中的代码
- catch:和try搭配使用,如果catch()声明的错误类型和try区块中的代码错误类型一致,就立刻执行catch区块中的代码
-
Multi-catch(多重捕捉):在实际中,经常会遇见数个类型的catch区块在做同样的事情,而且catch区块内容都是重复的,这样不仅不方便撰写也不方便维护,这时候可以写成如下模式
try{ ; }catch(IOException|InterruptedException|ClassCastException){ ; }
-
throws:操作对象抛出受检对象,但目前环境信息却不足以处理异常,则无法使用try、catch处理,此时就要用throws声明此方法会抛出的异常类型或其父类型,否则会编译失败。(在同时使用继承时,如果父类某个方法声明throws某些异常,子类重新定义该方法时不可以throws父类方法中没声明的其他异常。throws父类方法声明的异常的父类)
-
throw:在catch区块操作完部分错误处理之后,可以使用throw再将异常抛出
- assert:分为assert booleanexpression;和assert booleanexpression:detailexpression;如果booleanexpression为true则什么都不发生若为false,则会发生java.lang.AssertionError
2. 异常继承架构
- 设计错误对象都继承自java.lang.Throwable类,Throwable定义了取得错误信息,堆栈追踪(Stack Trace)等方法,它有两个子类:java.lang.Error和java.lang.Exception
3. 异常和资源管理
- finally:在调用文档时,当文档读取完或者不使用时就应该close()关闭文档,但是如果程序在Scanner.close()前发生了异常,该语句就会因中断而不被执行,finally可以和try、catch搭配,若写有fianlly区块,则finally区块就一定要被执行,将Scanner.close();写在fianlly区块中就可以避免上述情况。
- Try-With-Resources: 要自动关闭资源的对象撰写在try()中,如果无需catch处理异常,可以不用写,也不用写finally区块
4. Collection架构
- 如同数据结构一样,在java.util.Collection中有增、删、遍历对象 add: remove: clear: size: iterator:
- set:在收集过程中若有相同对象,想要重复收集,可以使用set接口的操作对象
5.具有索引的List
核心方法 add(int index, E element)
、 remove(int index)
、set(int index, E element)
-
ArrayList:相当于数据结构的线性表,
-
LinkedList:相当于数据结构链式表
6. 键值对应的Map
- 如网络搜索,根据关键字可以找到对应数据,程序设计中的java.util.Map接口的操作对象用来简历键值对应数据
- 常用的Map操作类有HashMap、TreeMap与Properties三种。
- 如果想取得Map中所有的键,可以调用Map的keySet()返回Set对象。由于键是不重复的,所以使用Set操作返回或者使用values()返回Collection对象
教材学习中的问题和解决过程
- 在编写书上课后习题的代码时经常遇见args[0],开始并不清楚args[0]代表什么,只记得在最开始学java时,要打开main方法就一定要写public static void main(String[] args),后面才知道args是一个字符串数组的变量名,不是关键字,是arguments的缩写,只是一个默认名。String[ ] args表示给主方法传一个字符串数组
- 如何指定命令行自变量?
- 其实刚开始看的时候有一堆不懂的,现在也并不能说就真的懂了,但是一些零零碎碎的小问题的解决过程就不一一赘述了
代码调试中的问题和解决过程
代码:
本来书上是问在没有指定命令行自变量的情况下执行程序会发生什么?但是由于自己并不熟悉命令行自变量,也不知怎么指定命令行自变量,只能猜测是catch()中的错误类型不恰当而导致了编译的失败,所以对程序做了一些修改
修改:
改成如上程序之后,没有指定命令行自变量,程序编译通过,运行后输出“输入数字”
代码托管截图:
其他(感悟、思考等,可选)
- 前几周的学习其实都有点操之过急,正好这几章也有与数据结构相关,可以和数据结构的课程结合起来,接下来的假期正好可以休息一下也可以回顾一下之前学过的和最近所学的数据结构,感觉这样效果会比较好。
学习进度条
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
|
目标 |
3500行 |
28篇 |
300小时 |
|
第五周 |
200/1200 |
1/5 |
20/105 |
|
第六周 |
||||
第七周 |
||||
第八周 |
|