20145328 《Java程序设计》第5周学习总结
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周学习总结的更多相关文章
- 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可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 用httpclient做压力测试时Too many open files的解决办法
在工作过程中,用httpclient去压测一个web api,发现压一小段时间就出现了Too many open files.实际上,HttpClient建立Socket时 ,post.release ...
- LeetCode-Lowest Common Ancestor of a Binary Tre
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- 170426、centos6.5安装 Zookeeper注册中心
注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/hosts 文件中添加: # zookeeper servers 192.168.3.71 r ...
- Centos7.2yum安装时候出现db5错误的解决办法
Centos7.2使用yum安装软件是出现如此错误提示 解决办法 删除 /var/lib/rpm文件夹下面所有以__db开头的文件
- 报错分析---->jsp自定义标签:Unable to load tag handler class
Unable to load tag handler class 无法加载标签处理程序类 处理自定义标签的类中如下: 调用自定义标签的jsp中如下:
- SaaS成熟度模型分级:
SaaS成熟度模型分级: 根据SaaS应用是否具有可配置性,高性能,可伸缩性的特性,SaaS成熟度模型被分成四级.每一级都比前一级增加三中特性中的一种. 可配置 高性能 可伸缩 Level1 N ...
- linux根文件系统 /etc/resolv.conf 文件详解(转)
大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf.很多网友对此文件的用处不太了解.其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名 ...
- UVA10534:Wavio Sequence(最长递增和递减序列 n*logn)(LIS)好题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68553#problem/B 题目要求: Wavio是一个整数序列,具有以下特性 ...
- 创建正真的Java不可变类
如果需要设计一个不可变类,尤其要注意其引用类型Field,如果其引用类型Field的类是可变的,就必须采取必要的措施来保护该Field所引用的对象不会被修改,这样才能创建真正的不可变类. class ...
- BigData Technique&&Application指南-笔记1
1.数据的量级 传统企业数据量基本上在TB之上,大型互联网企业达到了PB以上. 2.大量不同的数据类型 结构化数据:是存储在数据库里,可以用二维表来逻辑表达数据. 半结构的非结构化数据:一般都是纯 ...