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分)

  1. 从0分加到10分为止

  2. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  3. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  4. 教材学习中的问题和解决过程, 一个问题加1分

  5. 代码调试中的问题和解决过程, 一个问题加1分

  6. 本周有效代码超过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就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

20155232 2016-2017-3 《Java程序设计》第5周学习总结的更多相关文章

  1. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  2. 20155328 2016-2017-2 《Java程序设计》第九周学习总结

    20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...

  3. 20155216 2016-2017-2 《Java程序设计》第九周学习总结

    20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...

  4. 20155320 2016-2017-2《Java程序设计》第九周学习总结

    20155320 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...

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

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

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

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

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

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

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

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

  9. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  10. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

随机推荐

  1. 从0到1学习node(七)之express搭建简易论坛

    我们需要搭建的这个简易的论坛主要的功能有:注册.登录.发布主题.回复主题.下面我们来一步步地讲解这个系统是如何实现的. 总索引: http://www.xiabingbao.com/node/2017 ...

  2. Codeforces Round #383 Div 1题解

    第一次打Div 1,感觉还是挺难的..把基础题打完就日常划水了.... [A. Arpa's loud Owf and Mehrdad's evil plan](http://codeforces.c ...

  3. Visual Studio Code 中编写 C++ 的工作流

    1. 官网下载 Visual Studio Code ,安装.按提示安装 cpp 插件和 cmake 插件. 官网下载 CMake ,安装. 官网下载 Mingw ,安装. 安装 Mingw 时,注意 ...

  4. python2.7读汉字的时候出现乱码,如何解决

    我使用的是window系统,安装Anaconda,所以用的是. 1.数据形式 2.读进来乱码 3.解决办法 3.1方法1 import pandas as pd #pd.read_csv('c:/us ...

  5. 用C++编一程序,先输出一行sun mon tue wed thu fri fri,接着使用右对齐打印出日期,像日历那样

    用C++编一程序,先输出一行sun mon tue wed thu fri fri,接着使用右对齐打印出日期,像日历那样 先输出一行sun mon tue wed thu fri fri,再提醒用户输 ...

  6. c++动态库与静态库

    windows下: 在进行库创建的时候会用到导出符号,在函数,类的声明处直接指出. 静态库:用的时候通常将 #pagram (lib,"name"),包含头文件,可以使用任何导出类 ...

  7. 球谐光照(Spherical Harmonics Lighting)及其应用-应用篇

    上一篇介绍了球谐函数的一些原理和性质,本篇主要介绍如何实现球谐光照,将这种光照应用到实际的场景中去. 我们知道,球谐光照实际上就是将周围的环境光采样成几个系数,然后渲染的时候用这几个系数来对光照进行还 ...

  8. 获取LayoutInflater对象的方法和inflate方法的一些参数问题

    一.获取LayoutInflater的三种方法 1. LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSys ...

  9. C++ 友元函数的函数指针

    成员函数的指针 讲友元之前先讲普通的成员函数的函数指针 class Std_interface { public: virtual void suspend() = 0; }; // define t ...

  10. Spring Cache扩展:注解失效时间+主动刷新缓存

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...