20155232 2016-2017-3 《Java程序设计》第5周学习总结
20155232 2016-2017-3 《Java程序设计》第5周学习总结
教材学习内容总结
- 第八章 异常处理
1.使用try和catch
将正常的流程放try块中,异常处理放catch块中。
2.错误会被包装为对象,这些对象都是可抛出的,因此设计错误对象都继承自java.lang.Throwable类,Throwable定义了取得错误信息,堆栈追踪等方法,他有两个子类:java.lang.Error与java.lang.Exception。
3.Error与其子类实例代表严重系统错误。(如硬件层面错误,JVM错误或内存不足等)Error对象抛出时,基本上不用处理,任其传播至JVM为止。
4.程序本身的错误,建议使用Exception或其子类实例表现,所以通常称为异常处理。
5.Exception或其子对象,但非属于RuntimeException或其子对象,称为受检异常。
6.属于RuntimeException衍生出来的类实例,称为非受检异常。
7.如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将永远不会被执行。
8.可以使用多重捕捉的语法。
注意:catch括号中列出的异常不得有继承关系,否则编译错误。
9.throws:自己无法处理,用在方法声明。
10.throw:方法中抛出Checked Exception,方法声明中必须有throws。
若是非受检异常,则无需使用throws声明。
11.java是唯一采用受检异常的语言。有两个目的:一是文件化,二是提供编译程序信息。
12.自定义异常类别时,可以继承Throwable,Error或Exception的相关子类,通常建议继承自Exception或其子类,如果不是继承Error或RuntimeException,那么就会是受检异常。
13.查看堆栈追踪最简单的方法就是直接调用异常对象的
printStackTrace()
14.如果想要取得个别的堆栈追踪元素进行处理,则可以使用
getStackTrace()
注意要善用堆栈追踪,前提是程序代码中不可有私吞异常的行为。这样程序代码会对应用程序的维护造成伤害。甚至找不出错误根源。
15.在使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,而不是重抛异常的地方。
16.使用
fillInStackTrace()
方法会重新装填异常堆栈,将起点设为重抛异常的地方,并返回Throwable对象。
17.断言
程序执行的某个时间点或某个情况下,必然处于或不处于何种状态。
18.如果要在执行时启动断言检查,可以在执行java指令时,指定-enableassertions 或-ea自变量。
19.合适使用断言(5点)书上p244
20.try,catch语法搭配finally,无论try区块中有无异常,则finally区块一定会被执行。
如果程序中先return了,而且也有finally区块,就会先执行区块再将值返回。
21.在JDK7后新增了尝试关闭(Try-With-Resource)语法,想要尝试关闭资源的对象,是撰写在try之后的括号中。
注意尝试关闭资源语法也可以同时关闭两个以上的对象资源,只要中间以分号分个,在try括号中,越后面撰写的对象资源,越会越早被关闭。
22.java异常体系结构:
- 第九章
1.收集对象的行为,像是新增对象,移除对象的方法等,都是定义在java.util.collection中。
2.java.lang.Iterable定义了itrable()方法返回java.util.Iterable操作对象,可以逐一取得收集的对象。
3.由java.util.Set定义,是收集的对象不重复,具有集合的行为。
4.由java.util.list定义,收集时记录每个对象的索引顺序,可依照索引取回对象。
5.由java.util.Queue,使收集对象时以队列方式,收集的对象加入至尾端。
6.如果希望对Queue的两端加入,移除等操作,则可以使用java.util.Deque。
7.数组在内存中会是线性连续的空间,根据索引随机存取速度快,排序时,可使用ArrayList。
8.java中许多要判断对象是否重复,都会调用hashCode() 和equals(),两个方法必须同时操作。
9.跟顺序有关的行为,通常要不是对象本身就是comparable,要不就是另行指定comparator对象告知如何排序。
10.接口只有一个方法必须操作时,使用Lambda表达式取代匿名类语法。
11.增强式for循环,可运用在数组上,还可以操作Iterable接口的对象上。增强式for循环是编译程序的蜜糖。
12.使用JDK8想要迭代对象还有新的选择,Iterable上新增了forEach()方法。
13.一般常用properties的setproperty()指定字符串类型的键值。
14.使用getproperty()指定字符串类型的建。
15.想要去的Map中所有键,可以调用Map的keyset()返回set对象。
16.想要取得键与值,可以使用enterSet()方法。
17.Map没有继承Iterable,有个forEach()方法是定义在Map接口上的,可以使用这个结合Lambda表达式,在迭代键值时获得不错的可读性。
教材学习中的问题和解决过程
- 在课本p233页上,Average4这个代码中:
package TryCatch;
import java.util.Scanner;
public class Average4{
public static void main(String[] args) {
double sum = 0;
int count = 0;
while(true) {
int number = nextInt();
if(number==0) {
break;
}
sum+=number;
count++;
}
System.out.printf("平均 %.2f%n",sum/count);
}
static Scanner console = new Scanner(System.in);
static int nextInt() {
String input = console.next();
while(!input.matches("\\d*")) {
System.out.println("请输入数字");
input = console.next();
}
return Integer.parseInt(input);
}
}
~
出现
"\\d*"
这个代码,不太明白什么意思,于是上网搜索查询了一下。
- 解决:
\d正则表达式是非数字的意思,以非数字分割字符串。而\d*表示有多位数字。
- 课本p240页代码中,将字母转换为大写的代码时
toUpperCase()
那么转换为小写的代码是什么?
- 解决:
toLowerCase()
课本p241页中提到善用堆栈追踪,前提是程序代码中不可有私吞异常行为。那么什么叫私吞异常行为?如果私吞异常了,会发生什么情况?
解决:
私吞异常包括在捕捉异常后,什么都不做,不做处理。这样程序代码会对应用程序造成危害,造成出错困难,找不到错误根源。
lambda表达式和匿名内部类有什么相同点和不同点?
解决
首先,Lambda表达式是匿名内部类的一种简化,因此它可以取代匿名内部类的作用。但是Lambda表达式并不能取代所有的匿名内部类。
代码调试中的问题和解决过程
在按照课本上p266输入代码后,出现了如下编译错误。
总是提示找不到符号。
但是对照课本上代码对照了一遍还是没找出问题。解决方案:
(未解决)依旧是按照课本p269页代码打下来的,编译不通过,最后找到了错误。
如下错误代码:
解决方案:
用红色圈圈编注出来了。将
set
代码改为
students
即运行成功:
- 按照课本输入p293页和p294页代码,运行错误
p293:
- 原因分析:
是因为没有书中的 .properties 文档。
- 课本第p297页代码编译时遇到的问题:
会显示不安全操作这个注释,在这之前很多次遇到同样的问题,但是不影响编译和运行。
- 解决方法
代码托管
代码提交过程截图:
代码量截图:
结对及互评
与20155215宣言结对学习,她的博客要素齐全,排版也很整齐,都有按老师的要求写。希望再多一点课本中的问题总结,代码量再继续增加总的来说,还是写的很不错的,值得借鉴。继续加油我们可以一起共同努力,在学习java中遇到不懂的问题可以一起讨论。
评分标准(满分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)。得分情况如下:9分
点评过的同学博客和代码
上周考试错题总结
2.填空:使用JDB进行调试时查看源代码的命令是(list)。
原因:还是对命令掌握的不够熟练,在前几周的开始中总是命令题会错,所以还是用的不够多,不够熟练,练的熟练了才能记于心中。
4.填空:”Hello”.charAt(1) 的值是(‘e’)
原因:这个题当时是没懂题目的意思,现在看完答案就懂得了,是取下标第一个字母也就是e。
5.填空:System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..
原因:这个题漏做了...
6.填空:”Hello”.substring( 0,2 )的值是“He”
原因:这个题是真的不会,现在也不太懂。希望老师能讲解一下。
13.填空:标注(@Override)可以从语法上保证方法的Override.
原因:这个错的很不应该,把题目意思弄错了,不应该丢分。
17.判断:Math中的abs()方法可以Override.(X)
原因:之前一直不清楚这个,现在就能记住了。
30.填空:面向对象中,设计经验可以用(设计模式)表达
原因:这个之前没有了解过这种概念类的知识点,以后要多加留心,能丰富自己的知识。
感悟心得
- 对教材感悟
第八章主要讲解了使用try、catch处理异常。认识了异常继承架构。了解了throw、throws的使用,会运用finally关闭资源,和自动关闭资源。认识了AutoCloseable接口。在第九章中,认识了Collecton与map架构,使用Collection与Map操作对象。对收集的对象进行排序。简单介绍了Lambda表达式和泛型语法。我觉得这两章总体来说比之前的都要难一些,有时候很多看不太懂,就会上网搜,或者请教同学。
- 对考试感悟
这次考试成绩比上次退步了,有几个题目没看懂,还是对课本的知识内容掌握的不够扎实,熟悉,在书上找内容的时候耽误了很多时间,有的命令还是没有熟记,就得在书上查找。所以在学习新课程的同时,应该及时巩固之前学习的内容,不断加强记忆,才能做到熟记于心。
- 课本中代码的部分展示与思考
这是书上227页的Average程序运行结果:
在上图中第二图片显示了若输入的数字不是int型会出现的错误提示。这里不符合Scanner对象的预期。
这个是228页程序代码,try和catch做处理。如果发生错误,执行流程会跳离错误点。然后比较catch括号中声明的类型,是否符合被抛出的错误的对象类型,如果是的话就执行catch区块中的程序代码。执行完catch后,没有其他程序代码了,所以程序就结束了。
而下图这个代码执行完catch区块后,由于还在while中,所以可继续下一个循环流程。
下面这个代码是书上233页的例子,使用了Scanner的next()的方法来取得用户输入的下个字符串,如果字符串不是数字格式就会提示用户输入数字。matches()方法中设定了
"\\d*"
这是规则表达式,表示检查字符串中的字符是不是数字,若是则返回true。
书上224页的范例中,c方法调用b方法,b方法调用a方法,而a方法会因为text参考null,然后调用toUpperCase()。可以调用printStackTrace()在控制台显示堆栈追踪。
书上242页代码,在使用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,而不是重抛异常的地方。
两次都显示的相同的信息。
使用
fillInStackTrace()
方法,可以看到第二次显示堆栈追踪的起点。
在书上248页代码如下:
运行结果如下:
如果程序中先return了,而且也有finally区块,就会先执行区块再将值返回。
在p253页哪个对象资源会先被关闭呢?
如上图运行结果,在try括号中,越后面撰写的对象资源越早被关闭。
p268页代码,由于set的特性就是不重复,若有单词相同,则不会重复加入。运行结果如下:
课本p273页代码,可以清楚的看到堆栈结果是先进后出的,所以先显示Justin。
课本p283页代码,使用了java.util.Arrays的static方法asList(),这个方法接受不定长度自变量,可将指定的自变量收集为List。运行结果:
p286操作Comparable,将余额从小到大排序。
运行结果:
书上p288页代码,操作comparator。
运行结果:
在java的规范中,与顺序有关的行为,通常要不对象本身是Comparable要不就是另行指定的Comparator对象告知如何排序。
建立操作对象时,可以使用泛型语法指定建与值的类型。要建立键值对应,可以使用put()方法,第一个自变量是建,第二个是值。
在hashMap中建立键值对应后,建是无序的,这可以在上图结果中看到。如果想要建有序,则可以使用TreeMap,下图:
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 15/15 | 1/1 | 23/26 | |
第二周 | 208/240 | 2/2 | 35/38 | |
第三周 | 376/584 | 3/3 | 32/38 | |
第四周 | 823/1407 | 4/4 | 28/30 | |
第五周 | 986/2393 | 4/4 | 21/26 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:26小时
实际学习时间:21小时
参考资料
20155232 2016-2017-3 《Java程序设计》第5周学习总结的更多相关文章
- 20155227 2016-2017-2 《Java程序设计》第九周学习总结
20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...
- 20155328 2016-2017-2 《Java程序设计》第九周学习总结
20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...
- 20155216 2016-2017-2 《Java程序设计》第九周学习总结
20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...
- 20155320 2016-2017-2《Java程序设计》第九周学习总结
20155320 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
随机推荐
- 在 Windows 上测试 Redis Cluster的集群填坑笔记
redis 集群实现的原理请参考http://www.tuicool.com/articles/VvIZje 集群环境至少需要3个节点.推荐使用6个节点配置,即3个主节点,3个从节点. 新 ...
- Omi教程-插件体系
插件体系 Omi是Web组件化框架,怎么又来了个插件的概念? 可以这么理解: Omi插件体系可以赋予dom元素一些能力,并且可以和组件的实例产生关联. omi-drag 且看这个例子: 点击这里→在线 ...
- Laravel路由和控制器的绑定
路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由. Route::get('/', function () { return view('welcom ...
- 【openstack N版】——块存储服务cinder
一.块存储服务介绍 1.1块存储服务通常包含以下组件 cinder-api: 接受API请求,并将其路由到"cinder-volume"执行. cinder-volume: 与块存 ...
- 关于使用微信js上传图片 笔记
微信js初始化时需要签名,先获取签名(java代码): 1.获取jsapi_ticket,此数据自己保存,有效时长为7200秒 private String getJsticket(String to ...
- ThinkPHP框架知识的注意点
ThinkPHP框架 访问入口文件后在application文件夹中会出现一些文件夹,其中的home文件夹是前端模块,也可以在application文件夹中新建文件夹.home文件夹模块中Conf文件 ...
- 【SysML】模块定义图(BDD, Block Definition Diagram)
一.引言 SysML中的模块定义图,英文为 “Block Definition Diagram”,简称BDD,是系统建模过程中最为常见的图之一,BDD是一种结构图,它主要对系统的结构组成以及组成元素间 ...
- .NET入行之工作前
时间就像轻风一样,刻意感受的时候几乎把你吹倒,不留意的时候又从你身边轻轻飘走了:长此以后,我怕自己会变得麻木,忘记了原来的样子.所以还是决定给自己留点什么,万一哪天忘记了,还可以再翻起来. 工作两年的 ...
- Isomorphic Strings leetcode
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- Gridview 重建表头/单击单元格弹出对话框/改变单元格背景色
整理工作~ 完整的代码在GitHub上, 路径: 项目背景:追踪某个issue,并且记录每天的状态. 要求:1.点击日期就能更改,并且用颜色标志不同的状态 2.增加按钮可关闭issue 3.布局要求日 ...