20145314郑凯杰 《Java程序设计》第5周学习总结

教材学习内容总结

托管的代码:

电脑上的代码:

  1. try与catch
  • 简单来说,try与catch是两个块,java的程序会把正常程序的流程放入try块里,把非正常的放入catch块中。然后错误信息会被储存到Exception里,这样十分保证错误的程序可以完整地跑下来,而且还有利于我们找错误。调试程序时可以使用。

    错误都会被包装为对象,这些对象都是可throw的。
  • 异常继承架构

设计对象都继承自java.lang.Throwable类。

Throwable有两个子类:java.lang.Error和java.lang.Exception。

除去书上冗余的分析过程,直接记录有用的语法(Multi-catch)语法:

try{
做一些事
}catch(IOException | InterruptedException|ClassCastException e){
e.printStackTrace();
}

使撰写方式简介许多,catch区块会在发生IOException、InterruptedException或 ClassCastException时执行。

  • 要抓还是要抛

你可以在任何流程中抛出异常,不一定要在catch区块中,在流程中抛出异常,就直接跳离原有的流程,可以抛出受检或非受检异常。

当方法中抛出Checked Exception时,方法声明中必须有throws。

  • 自定义异常

    主要分类可分为以下几类:

第一种定义方式,继承Exception类

第二种定义方式:继承Throwable 类

这里提出一个问题:在有多个catch块,而且每次处理的异常类型具有继承关系时,应该首先catch子类异常,再catch父类异常。

分析:当一个try块后面跟着多个catch块时,如果发生的异常匹配第一个catch块的参数,便将异常处理权利交给第一个catch块。如果发生的异常与第一个catch块不匹配,便看是否与第二个catch块匹配,依次下去,如果到最后依然无法匹配该异常,便需要在方法声明中添加一条throw语句,将该异常抛出。

  • 异常堆栈

用堆栈追踪错误

  1. 代码中不要私吞异常

  2. 不要错误处理异常

  3. 处理时不要显示错误信息

.

  • 异常与资源管理

finally与assert

assert的两种语法:

assert boolean_expression;

assert boolean_expression:detail_expression;

finally区块一定会被执行。

如果程序撰写的流程中先return了,而且也有finally区块,finally区块会先执行完后,在将值返回。

按老师的要求进行动手操作:

p227 Average.java: 没有错误处理的

测试结果1:

产生异常的原因在报错信息的什么位置?

答:第一行。

程序出错就崩溃,体会错误处理的重要性

p228 Average2.java: try...catch

与 Average.java比较,这个程序有什么优点。

答:在错误时友好地提示信息。

运行结果2:

p229 Average3.java: 有错误,如何回到正常流程

与 Average2.java比较,这个程序有什么优点。

答:这个程序直接略过了错误信息进行计算,更加合理。

运行结果3:

p233 Average4.java: 使用正则表达式检查错误

参考正则表达式入门

信息安全专业的学生要学会使用正则表达式解决安全问题

运行结果4:

p236 FileUtil.java: throws,throw 抛出异常

写个带main的类测试一下

运行结果5(通过编译但是却异常):

改进后,运行结果6:

p240 StackTraceDemo.java: 异常堆栈

最上层是产生异常的根本原因

以下是调用方法顺序,找代码原因可以从最下层开始找

运行结果7:

p242 StackTraceDemo2.java: 重抛异常,StackTrace仍然从产生处追踪

运行结果8:

p243 StackTraceDemo3.java: 使用fillInStacktrace重抛异常,StackTrace仍然从重抛处追踪

第九章:

  • 使用Collection集合对象

Connection: 增、删、遍历对象

  1. add
  2. remove
  3. clear
  4. size
  5. iterator

插图10:

List: 类似数组,具有位置信息,带索引。

ArrayList:即线性表

LinkedList:链表

Queue: 队列

核心方法

  1. offer
  2. poll
  3. peek

Deque: 双向队列

  • 键值对应的Map

数组是用数字索引(Key),Map可以看作可以用非数字索引(Key)的数组

  • Map

    1. put
    2. get
    3. size
    4. remove
    5. forEach
  1. TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Coomparable接口,或是在创建TreeMap时指定操作Comparator接口的对象。

  2. 一般常用Properties的setProperty()指定字符串类型的键值,getProperty()指定字符串类型的键,取回字符串类型的值,通常称为属性名称与属性值。

  3. 如果想取得Map中所有键,可以调用Map的keySet()返回Set对象,如果想取得Map中所有的值,则可以使用values()返回Collection对象。如果想同时取得Map的键与值,可以使用entrySet()方法,这会返回一个set对象,每个元素都是Map.Entry实例,可以调用getKey()取得键,调用getValue()取得值。

学习过程中遇到的问题和解决过程

本次学习过程中,遇到的问题比较多,而且很复杂。

一是时间很紧,5320说得对,一周两章确实要命,这周内容这么难更没法完全掌握了。我就先跟着老师的思路跑了跑程序,详细的等以后再理解。

二是内容书虽然语言比较俏皮,但是理解起来还很困难。需要老师来好好地概括梳理一下,自学如此多还是有点困难的。

代码调试中的问题和解决过程

对于P295页的代码:

import java.util.HashMap;
import java.util.Map; import static java.lang.System.out;
public class MapKeyValue {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("one", "一");
map.put("two", "二");
map.put("three", "三");
out.println("显示键");
map.keySet().forEach(key -> out.println(key));
out.println("显示值");
map.values().forEach(key -> out.println(key));
}
}

书上给出的结果

插图2:

但是我得出的结果是:

运行结果10:

原因还不清楚,时间太紧,我决定询问一下其他同学

其他(感悟、思考等,可选)

本周很不巧碰上了清明放假,来不及好好学习JAVA,一周两章显得很紧。实话说,这周我学的不是很好,时间是个问题,而且这两章内容确实很难懂,过多的压力和复杂的知识压过来之后突然就会感到莫名地烦躁。

不过没关系,下周开始,我依然会以十二分的精神继续学习,加快进度,弄清本周的知识。首先解决掉上面这个问题。再根据数据结构的C语言编程,与JAVA融合在一起。下周加油!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 1/2 20/20
第二周 700/600 2/4 38/38
第三周 900/1100 1/7 60/60
第四周 913/1350 1/9 90/90

参考资料

20145314郑凯杰 《Java程序设计》第5周学习总结的更多相关文章

  1. 20145314郑凯杰 《Java程序设计》第10周学习总结

    20145314郑凯杰 <Java程序设计>第10周学习总结 代码托管: 学习内容总结 网络编程 会打手机吗? 第一个问题:会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛 ...

  2. 20145314郑凯杰 《Java程序设计》课程总结

    20145314郑凯杰 <Java程序设计>课程总结 每周读书笔记链接汇总 ①寒假预习--"helloworld" ②第一周读书笔记 ③第二周读书笔记 ④第三周读书笔记 ...

  3. 20145314郑凯杰 《Java程序设计》实验五 实验报告

    20145314郑凯杰 <Java程序设计>实验五 实验报告 实验搭档王亦徐:http://www.cnblogs.com/1152wyx/p/5471524.html 实验要求 完成实验 ...

  4. 20145314郑凯杰 《Java程序设计》第9周学习总结 积极主动敲代码

    20145314郑凯杰 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 ①JDBC(Java DataBase Connectivity) 即java数据库连接,是一种用于 ...

  5. 20145314郑凯杰 《Java程序设计》实验四 实验报告

    20145314郑凯杰 <Java程序设计>实验四 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  6. 20145314郑凯杰 《Java程序设计》实验三 敏捷开发与XP实践实验报告

    20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  7. 20145314郑凯杰 《Java程序设计》第8周学习总结

    20145314郑凯杰 <Java程序设计>第8周学习总结 教材学习内容总结 代码已托管 第十五章 通用API ①日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 使 ...

  8. 20145314郑凯杰 《Java程序设计》第7周学习总结

    20145314郑凯杰 <Java程序设计>第7周学习总结 教材学习内容总结 首先放上代码托管图片和本地代码图片: 插图4: 插图5: 插图6: 第十三章 时间与日期 13.1 认识时间与 ...

  9. 20145314郑凯杰 《Java程序设计》实验二 实验报告

    20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  10. 20145314郑凯杰 《Java程序设计》实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告

    20145314郑凯杰 <Java程序设计>实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告 实验要求 •使用JDK编译.运行简单的Java程序: •使用Ecl ...

随机推荐

  1. angular 4 路由变化的时候实时监测刷新组件

    当路由变化的时候刷新组件 比如说要刷新header组件 在header.ts里 import {Router, NavigationEnd} from "@angular/router&qu ...

  2. MapRecude

    任务:分析通话记录,查处每个手机号码有哪些打过来的号码 13510921776 10086 13710148751 10086 13914248991 10086 13510921776 137101 ...

  3. Codeforces Round #118 (Div. 1) A. Plant

    A. Plant 题目链接:http://codeforces.com/problemset/problem/185/A 题意:一个植物会长,一开始是一个正三角形,每过一年,一个向上的正三角形会变成三 ...

  4. Netty处理TCP拆包、粘包

    Netty实践(二):TCP拆包.粘包问题-学海无涯 心境无限-51CTO博客 http://blog.51cto.com/zhangfengzhe/1890577 2017-01-09 21:56: ...

  5. Python中的高级数据结构(转)

    add by zhj: Python中的高级数据结构 数据结构 数据结构的概念很好理解,就是用来将数据组织在一起的结构.换句话说,数据结构是用来存储一系列关联数据的东西.在Python中有四种内建的数 ...

  6. Linux内核调试技术——jprobe使用与实现

    前一篇博文介绍了kprobes的原理与kprobe的使用与实现方式,本文介绍kprobes中的另外一种探測技术jprobe.它基于kprobe实现,不能在函数的任何位置插入探測点,仅仅能在函数的入口处 ...

  7. Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core

    Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...

  8. mysql数据库从删库到跑路之mysql多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...

  9. win10怎样取消电脑自动锁屏

    笔记本经常用着用着就锁屏了 解决方法: 打开控制面板的电源选项,更改“使计算机进入睡眠状态”时间为“从不”.

  10. JQuery变量数字相加的研究

    在 jquery中,一个变量和一个数字相加,期望得到1+2=3但是: eg: <input type="text" class="input_Num" i ...