20145328 《Java程序设计》第5周学习总结

教材学习内容总结

语法和继承架构

异常处理关键字

  • 第八章内容主要是对Java的异常处理

  • Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。

  • Throws:

    • throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。
  • Throw:

    • throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。
  • Try:

    • try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。
  • Catch:

    • catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
    • catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。
    • 也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。 
  • Finally:

    • try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。

try...catch语法

  • try…catch语法可以捕捉try部分的异常,如果没有try…catch的时候,出现异常的时候程序就会报错,如果加上try…catch,出现异常程序可以正常运行,只是把错误信息存储到Exception里,所以catch是用来提取异常信息的,我们需要在Catch部分加上一句System.out.println(xxx);等类似的代码,将出现异常可以把异常打印出来。在捕捉到异常之后千万不要像下面这样的代码一样什么都不做:
try{
……
}catch(SomeException ex){
}
  • 这样的话我们在捕捉到错误信息之后都不知道发生了什么,很不利于维护,当然,我们也不可以对异常执行一些错误的处理,这样会误导维护者。

  • 是抓还是抛?

    • throws:自己无法处理,用在方法声明
    • throw:方法中抛出Checked Exception,方法声明中必须有throws

Collection与Map

使用Collection集合对象

  • 本节内容和数据结构与算法这门课有很大的联系,学习起来也颇有触类旁通的感觉
  • List: 类似数组,具有位置信息,带索引
    • 核心方法:

      • add(int index, E element):可以将指定的元素插入此列表中的指定位置。
      • remove(int index):移除此向量中指定位置的元素。
      • set(int index, E element):用指定元素替换列表中指定位置的元素。
    • ArrayList:《数据结构》中的线性表
    • LinkedList:《数据结构》中的链表
  • Set: 其中的对象不能有重复的
  • Queue: 队列
    • 核心方法

      • offer:添加一个元素并返回true,如果队列已满,则返回false
      • poll:移除并返问队列头部的元素,如果队列为空,则返回null
      • peek:返回队列头部的元素,如果队列为空,则返回null
    • Deque: 双向队列

键值对应的Map

  • HashMap:建立的键值对应是无序的
  • TreeMap:建立的键值对应是有序的
  • values方法是获取集合中的所有的值,没有键,没有对应关系
  • KeySet是将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。keySet():迭代后只能通过get()取key。

教材学习中的问题和解决过程

主要问题出现在第八章堆栈的追踪过程以及第九章P265的SimpleLinkedList.java,前者是因为在学习的时候是直接敲代码并调试运行,虽然程序的输出结果与书上一致,但一开始还是吓了一跳,因为没看书所以不知道为什么会输出的是类似错误提示一样的结果,在看过书后得知,

堆栈追踪信息中显示了异常类型,最顶层是异常的根源,以下是调用方法的顺序,程序代码行数是对应于当初的程序原始码,如果使用IDE,单击行数就会直接开启原始码并跳至对应行数(如果原始码存在的话)。printStackTrace()还有接受PrintStream、PrintWriter的版本,可以将堆栈追踪信息以指定方式至输出目的地(例如文档)

而后者则在下面的代码调试中的问题细说

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

在学习教材上的代码时发现一个错误,在调试P265的SimpleLinkedList.java时出现如下图所示的错误,

对照着书上代码看了很多遍排除了是自己在敲写代码过程中的拼写错误后,又对照着书上提供地址所下载的范例代码进行对比后发现书上代码以及示例代码都与自己代码一致后,确定是书上代码以及范例代码出现错误。书上代码如下所示

package week5;

public class SimpleLinkedList {
private class Node {
Node(Object o) {
this.o = o;
}
Object o;
Node next;
} private Node first; public void add(Object elem) {
Node node = new Node(elem);
if(first == null) {
first = node;
}
else {
append(node);
}
} private void append(Node node) {
Node last = first;
while(last.next != null) {
last = last.next;
}
last.next = node;
} public int size() {
int count = 0;
Node last = first;
while(last != null) {
last = last.next;
count++;
}
return count;
} public Object get(int index) {
checkSize(index);
return findElemOf(index);
} private void checkSize(int index) throws IndexOutOfBoundsException {
int size = size();
if(index >= size) {
throw new IndexOutOfBoundsException(
String.format("Index: %d, Size: %d", index, size));
}
} private Object findElemOf(int index) {
int count = 0;
Node last = first;
while(count < index) {
last = last.next;
count++;
}
return last.elem;
}
}

对照书上注释可知,最后一段代码的作用是访问所有Node并计数以取得对应索引对象,根据上面IDEA所提示的错误位置找到第一段代码中private class Node中,由书上注释可知,该段代码的作用是将收集的对象用Node封装,那么由此便可得知,在最后一段代码中return的值就应该是last.o而不是last.elem

而在调试书上P269中的Students.java时出现如下图所示错误,

对比示例代码发现最后一段代码System.out.println()括号中的值应该为students而不是set,而之所以是students而不是set的原因也很简单,在前面的代码中都没有set这个关键字,怎么可能输出set

学习感悟

本周学习下来的感受最大的一点就是不能单纯地对着书敲范例代码,不然虽然敲出了正确的代码,但也只是知其然不知其所以然,并不能明白为什么会是这样的结果,只是单纯地敲代码的程序员和咸鱼又有什么区别?但是又不能完全只对着书傻看,只有两者结合才能让学习更加高效和巩固。

代码托管情况

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 40篇 500小时
第一周 30/30 3/7 28/28
第二周 120/150 1/8 23/41
第三周 400/550 1/9 23/64
第四周 550/1100 1/10 24/88
第五周 800/1350 2/12 18/106

参考资料

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

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

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. js的等于号==的判断

    var str=0; str == "" 将返回true:

  2. System.getProperty()方法大全 (转载)

    System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号S ...

  3. 后端程序员如何玩转AJAX

    1.原生的Ajax入门 (感觉很是繁琐,所以一般我们都是用简单的方式) 创建一个核心对象 XMLHttpRequest var xmlhttp; if (window.XMLHttpRequest) ...

  4. Zabbix的API的使用

    上一篇:Zabbix低级主动发现之MySQL多实例 登录请求(返回一个token,在后面的api中需要用到) curl -s -X POST -H 'Content-Type:application/ ...

  5. MySQL exists 和 not exists 的用法

    有一个查询如下: 1 SELECT c.CustomerId, c.CompanyName   2 FROM Customers c   3 WHERE EXISTS(   4     SELECT  ...

  6. imToken 测评通关攻略

    imToken 测评通关攻略 2017-10-19 imToken 在 1.3.3 版本新增了用户风险测评系统, 目的是为了让更多的用户了解钱包安全知识以及区块链的基本概念, 从某种程度上提升了整个区 ...

  7. Spring整合JUnit4进行AOP单元测试的时候,报:"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=64

    错误代码 "C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size= ...

  8. Pycharm建立web2py项目并简单连接MySQL数据库

    引言 web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用:web2p采用Python语言编写,并且可以使用Python编程.web2py是一个完整的堆栈框架, ...

  9. Apache Lucene初探

    讲解之前,先来分享一些资料 首先,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等.这里就贡献一个讲解很到位的ppt 这是Lucene4.0的官网文档:htt ...

  10. springboot使用tomcat apr模式

    因需项目对并发要求比较高.提高Tomcat效率.使用tomcat apr模式.今天在这记录下使用过程.apr全称为apache portable runtime.这里套用下wiki对apr的解释. T ...