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. Vue基础-双向绑定:从 html 到 模板 到 渲染函数

    Vue 测试版本:Vue.js v2.5.13 在 Vue 中,可以利用 v-model 语法糖实现数据的双向绑定,例如: <div id="app"> <inp ...

  2. Storm-源码分析- metric

    首先定义一系列metric相关的interface, IMetric, IReducer, ICombiner (backtype.storm.metric.api) 在task中, 创建一系列bui ...

  3. Zipline Development Guidelines

    Development Guidelines This page is intended for developers of Zipline, people who want to contribut ...

  4. Using virtual lists

    Download demo project - 15.7 Kb Contents Introduction Virtual list Creating a virtual list Add items ...

  5. Pycharm配置同步服务器

    一.使用场景 我们一般需要将代码放到服务器上运行,但如果等我们将项目全部开发好之后再上传到服务器,而且每次在开发阶段需要经过多次修改,每修改一次,都手动上传一次,这样就太麻烦了,有没有一种方法可以达到 ...

  6. 【MFC系列】MFC快速设置控件文本字体、大小、颜色、背景

    以静态文本为例,分享一下怎么修改文本字体.大小.颜色.背景等参数.其他文本.控件等可参照修改. 1.修改字体.大小 这个很简单,首先在Dlg类中声明一个CFont类型的成员变量: 然后在类的初始化函数 ...

  7. 16.遇到就jar mismatch! Fix your dependencies的问题

    这是因为两个项目的jar包(android-support-v4.jar)不一致. 解决方法是把2个jar都删除,然后各自加上最新的jar包 但是换了之后发现R文件编不出来,原因是minsdk的设置问 ...

  8. 自己动手写RNN

    说的再好,也不如实际行动,今天手写了一个RNN,没有使用Numpy库,自己写的矩阵运算方法,由于这也只是个学习用的demo,所以矩阵运算那一部分写的比较丑陋,见笑了. import com.mylea ...

  9. python 之操作redis数据库(非关系型数据库,k-v)

    数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...

  10. yii2 框架中的即点即改入库

    视图层 <td><span class='num'  id="<?php echo $value['goods_attr_id']?>">< ...