20155228 2016-2017-2 《Java程序设计》第5周学习总结
20155228 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结
异常处理
-
try-catch语法:JVM执行try区块中的代码,如果发生错误就会跳到catch进行比较,如果错误类型被抛出错误的类型相符就执行catch区块中的代码。
-
错误会被包装为可抛出的对象,错误对象都是继承自Java.lang.Throwable类,Java.lang.Throwable类有两个子类:java.lang.Error和java.lang.Exception。程序设计本身的错误一般使用Exception或其子类来实现。
-
如果一个方法声明会抛出Throwable或子类实例,只要不是属于Error、java.lang.RuntimeException或其子类实例,就必须使用try-catch语法或者throws声明这个方法会抛出异常,否则就会编译失败。
-
在Exception或其子对象中,RuntimeException和其子对象成为执行时期异常或称非受检异常,其他的对象称为受检对象。
-
父类异常对象的捕捉必须放在子类异常对象捕捉之前,否则父类异常对象永远不会被执行,编译会出错。
-
多重捕捉的catch中列举的异常不能有继承关系,否则编译会出错。
-
如果抛出的是受检异常,必须在方法上使用throws声明,如果是抛出非受检异常,就不需要throws声明。
-
堆栈追踪可以知道异常的根源,可以调用异常对象的printStackTrace()方法得到异常的根源和调用方法的顺序。getStackTrace()方法可以取得个别堆栈追踪元素进行处理。fillInStackTrace()方法可以让堆栈异常的起点为重抛异常的地方。
-
断言assert:
assert 表达式 //表达式的结果只能是true或者false,如果是false就会编译出错
assert 表达式1:表达式2 //表达式2在表达式1位false时执行
-
finally:try-catch语法可以和finally搭配,无论try区块中是否有异常都会先执行finally区块中的代码。
-
自动尝试关闭资源:想要尝试自动关闭资源的对象写在try后面的括号之中。尝试自动关闭资源的对象必须操作Java.lang.AutoCloseable接口。在try括号中,越后撰写的对象资源越早被关闭。
Collection与Map
-
收集对象的共同行为定义在Collection中,在收集对象会有不同的需求,会依据需求使用不同的接口操作对象。
-
list:一种以索引方式保留收集对象的顺序的Collection。ArrayList在内存中是连续的线性空间,根据索引随机存取时速度快,适用于排序。LinkedList采用了链接的结构,适用经常变动索引的情况。
-
Set:收集不重复的内容。hashset的操作概念是,每个内存空间都有一个hash编码,这些空间称为hash桶。如果一个对象要加入hashset,则会调用对象的hashCode()取得hash码,并尝试放入对应号码的hash桶中。如果hash桶中已经有对象了,就会调用equals()进行比较。
-
Queue:收集的对象加入至尾端,取得对象时从前端。其中offer()方法用来加入对象,poll()方法用来取出对象,peek()方法是取出对象但是保留队列中的对象。
-
泛型:指定某个类或者方法支持泛型,可以用类型代号代替实际类型。
-
lambda表达式:lambda表达式的语法可以省略了接口类型与方法名称,->左边是参数列,而右边是方法本体。
-
Interable和Ierator:使用Interable接口中的Interator方法收集所有对象
-
Comparable和Comparator:通过操作Comparable接口来使用Collection的sort()方法对对象排序。通过操作Comparator接口来重载sort()方法。
-
Map:通过操作java.util.Map接口,可以根据某个键来取得对应的值。HashMap不对键排序,TreeMap会对键排序。keySet()收集所有键,vaules()收集所有值,entrySet()收集键和值。
教材学习中的问题和解决过程
- 关于教材P258页第三题。我的理解是,题目中try检查的numberformatexception指检查输入是否符合格式,因为输入的one是字符串,而要求输入的是整型数类型,所以我认为会显示“必须输入数字”。而网上提供的参考答案选择的也是B。但是我在写代码的时候却惊奇地发现,显示结果为arrayindexoutofboundexception,数组超过预定义长度。
- 关于教材P258-P259页第四、五题和第六题的区别:第四题第五题是在一个类中调用了某个定义了抛出异常的方法(构造函数),在定义这个类的异常抛出的时候,可以定义和方法的异常抛出相同的类,也可以定义方法的异常抛出的类的父类。而第六题是继承,子类在定义异常抛出的类时,只能定义父类的异常抛出的类或者其子类。
代码调试中的问题和解决过程
- 本周周内编程作业:关于Student类的对象实例的比较中遇到的问题:先定义好了student类,然后单独新建了一个名为overridequals的类重新定义了equals方法,然后overrideequals继承student类,最后再定义名为mian的类。编译通过证明没有语法问题,但事实上即使两个student实例的所有成员都是一样的,反馈都是不同。后来直接把重新定义eqauls的代码放到student类中就没有任何问题了。
代码托管
- 代码提交过程截图:
- 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图
- 代码量截图:
- 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图
上周考试错题总结
- “Hello”.charAt(1) 的值是(‘e’)
- System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..
- “Hello”.substring( 0,2 )的值是“He”
- CH06填空:在构造方法中调用本类的构造方法,要使用(this)关键字
- CH06填空:在构造方法中调用父类的构造方法,要使用(super)关键字
- CH07 填空:面向对象中,设计经验可以用(设计模式)表达
结对及互评
评分标准(满分10分)
-
从0分加到10分为止
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
6 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
7 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
点评模板:
-
基于评分标准,我给本博客打分:(0-10)。得分情况如下:xxx
点评过的同学博客和代码
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 20篇 | 400小时 | |
第一周 | 10/10 | 1/4 | 12/12 | |
第二周 | 120/130 | 1/5 | 9/21 | |
第三周 | 210/340 | 1/6 | 9/30 | |
第四周 | 460/800 | 1/7 | 9/39 | |
第五周 | 400/1200 | 1/8 | 9/48 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:9小时
-
实际学习时间:9小时