教材内容总结

这一周学习的进度和前几周比较的话是差不多的,都是学习两章。

异常处理

1.理解异常架构

2.牚握try...catch...finally处理异常的方法

3.会用throw,throws

4.理解Collection和Map架构

5.会用常见的数据结构和算法

6.了解Lambada和泛型

第八章内容主要是对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语句中可以进行资源的清除工作。如关闭打开的文件等。

collection与map

认识collection架构

Connection: 增、删、遍历对象

add

remove

clear

size

iterator

List: 类似数组,具有位置信息,带索引。List是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList。查看API文件的时候发现,List接口定义了add(int index, E element)、remove(int index)、set(int index, E element)等许多依索引操作的方法。

ArrayList

类似于《数据结构》中的线性表

LinkedList

类似于《数据结构》中的链表

Set: 其中的对象不能有重复的。同样是收集对象,在收集过程中若有相同对象,则不再重复收集,若有这类需求,可以使用Set接口的操作对象,String的Split()方法,可以指定切割字符串的方式。一般用hashcode()与equals()来判断对象是否相同。

Queue: 队列

核心方法

offer:添加一个元素并返回true,如果队列已满,则返回false。

poll:移除并返问队列头部的元素,如果队列为空,则返回null。

peek:返回队列头部的元素,如果队列为空,则返回null。

Deque: 双向队列。如果希望对Queue的两端进行加入、移除等动作,则可以使用java.util.Deque。

注意区分泛型与继承

Java的Collection API都支持泛型:在使用Collection收集对象时,由于事先不知道被收集对象的形态,因此内部操作时,都是使用object来参考被收集的对象,取回对象时也是以object类型返回。所以若想针对某类定义的行为操作,必须告诉编译程序,让对象重新扮演该类型。JDK5之后增加了泛型语法。若接口支持泛型,在操作时也会比较方便,只要声明参考时有指定类型,那么创建对象时就不用再写类型了,泛型也可以仅定义在方法上,最常见的是在静态方法上定义泛型。

Lambda表达式

注意与匿名类相比的好处:DRY(Don't Repeat Yourself)。

在JDK8中可以使用Lambda来简化程序,Lambda表达式的语法省略了接口类型和方法名称。—>左边是参数列,右边是方法本体。

Iterable与Iterator

Iterator

next

hasNext

Comparable与Comparator

sort:Java中对象排序,要么对象实现了Comparable可以直接sort要么提供Comparator对象告知sort如何排序

键值对应的Map

常用的Map类

以事先利用java.util.Map接口的操作对象来建立键值对应数据,之后若要取得值,只要用对应的键就可以迅速取得。判断键是否重复是根据hashcode()与equals(),所以作为键的对象必须操作hashcode()与equals()。

HashMap:建立的键值对应是无序的

TreeMap:建立的键值对应是有序的

Properties:配置文件

访问Map键值

keySet:将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。keySet():迭代后只能通过get()取key。

values:获取集合中的所有的值,没有键,没有对应关系

教材中的问题并解决

1.最开始不懂什么时候catch什么时候throw

在仔细阅读教材并且查阅资料后,我才逐渐理解。

java 的异常分两大类,RuntimeException 及其子类不要求捕捉,而其它的异常要求捕捉随便举几个 RuntimeException 子异常,有:数组越界异常、空指针异常、0作除数异常非RuntimeException 异常有:Socket异常、IO异常等对比一下我们就会发现,RuntimeException 是在程序中可以完全避免的,比如数组越界异常,只要我在程序里作个判断,如果要访问的数组元素下标和数组的长度作一下比较就知道会不会越界,再比如空指针异常,如果在访问对象时判断一下对象的变量是否为空就可以了。而非RuntimeException 则是程序无法避免的,比如IO异常,你的程序正在读一个文件,而这个文件所在磁盘出现了坏道,这就必然会引发IOException,这是不是靠编程高手编写完美的程序就可以法避免得了的,程序所能做的只有出现异常之后怎么处理的问题。

2.区分throw与throws

1.import java.io.*;

import java.util.Scanner

public class FileUtil {

public static String readFile (String name) throws FileNotFoundException{

StringBuilder text=new StringBuilder();

try {

Scanner console = new Scanner(new FileInputStream(name));

while (console.hasNext()) {

text.append(console.nextLine())

.append('\n');

        }
} catch (FileNotFoundException ex){
ex.printStackTrace();
throw ex; } return text.toString();
}
}

2.public class Shoot {

static void pop()

throws NegativeArraySizeException{

int [] arr=new int[-3];

}

public static void main(String[] args) {
try{
pop(); }catch (NegativeArraySizeException e){
System.out.println("pop()方法抛出的异常");
}
}

}

通过上面两个例子,我理解了throw与throws的区别

throw是语句抛出一个异常。

语法:throw (异常对象);

throw e;

throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)

语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{......}

public void doA(int a) throws Exception1,Exception3{...}

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

1.在调试throw与throws时曾经出现过这样的情况。



经过调试后发现,原来是我还没有理解好公共类这个概念,以至于没有将文件名设置为Captor最后导致了错误。

2.书上p267页的代码刚打完idea就提醒最后的elem错误了

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

代码托管(http://git.oschina.net/bestiisjava2017/nhx20155309-Java)

代码提交过程截图:

- 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图

代码量截图:

- 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图

上周考试错题总结

上一周的考题我自我感觉是非常难,所以考的有一些不理想。

  1. 填空:使用JDB进行调试时单步执行命令有step和next,我们优先使用(next)。
  2. 填空:使用JDB进行调试时查看源代码的命令是(list)。
  3. 填空:System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”..
  4. 面向对象中,设计经验可以用(设计模式)表达
  5. 可以用父类声明对象引用,用子类生成对象,但需要强制类型转换。(X)

这些错误都表明了我对整个书并没有看透,甚至还有遗漏的地方,并且有时候过于死板举一反三的能力不高,这些都应该是我以后需要克服的。

结对及互评

评分标准

基于评分标准,我给本博客打分8分。

得分情况如下:

解决了教材中的问题

代码行数大于200行;

代码格式规范

按照模板书写

点评过的同学博客和代码

20155220 吴思其(git@git.oschina.net:bestiisjava2017/wsq20155220_javaProgramming.git)

体验和感悟

Java与其他语言也有很大的不同。Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但C和C++被大家接受,所以Java设计成C++形式,让大家很容易学习。Java去掉了C++语言中的指针运算、结构、typedefs、#define、需要释放内存等功能,减少了平常出错的50%,让Java的语言功能很精炼。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 200/500 2/4 18/38
第三周 500/900 3/7 22/60
第四周 280/1300 2/9 30/90

预计学习:30小时

实际学习:27小时

2016-2017-2 20155309南皓芯java第五周学习总结的更多相关文章

  1. 2016-2017-2 20155309 南皓芯java第六周学习总结

    教材内容详解 这一次主要学习的是第十章与第十一章的内容.主要讲述了串流,字符处理和线程以及并行API. 输入输出 串流:Java中的数据有来源(source)和目的地(destination),衔接两 ...

  2. 2016-2017-2 20155309南皓芯java第四周学习总结

    教材内容总结 这次我们学习的还是两章的内容,学习任务量跟上次比的话大体上来讲是差不多的. 继承与多态 继承 继承也符合DRY(Don't Repeat Yourself)原则 Role role1 = ...

  3. 20165210 Java第五周学习总结

    20165210 Java第五周学习总结 教材学习内容 - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. 内部类的类体中不可以声明类变 ...

  4. JAVA 第五周学习总结

    20175303 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 •使用关键字interface来定义一个接口,定义接口分包含接口声明和接口体. •接口体中包 ...

  5. 2016-2017-2 20155309南皓芯《java程序设计》第七周学习总结

    教材学习内容总结 Lambda 一种匿名方法 表达式构成 括号以及括号里用逗号分隔的参数列表 仅有一个参数的可以省略括号 ->符号 花括号以及花括号里的语句 仅有一条语句时可以省略花括号,并且这 ...

  6. 2016-2017-2 20155309南皓芯《java程序设计》第十周学习总结

    教材内容总结 网络编程 定义:网络编程就是在两个或两个以上的设备之间传输数据. 计算机网络概述: 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 网络中的每个设备都会有一个唯一的数 ...

  7. 2016-2017-2 20155309南皓芯《java程序设计》第九周学习总结

    教材内容介绍 一 JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性 JDBC标准分为两个部分:J ...

  8. 2016-2017-2 20155309 南皓芯《java程序设计》第八周学习总结

    教材学习内容总结 本周学习的主要是第十四章,第十五章的内容. NIO与NIO2 同步非阻塞IO(Java NIO) : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多 ...

  9. Java第五周学习总结

    学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 1.接口 (1)使用关键字interface来定义一个接口,接口分为接口声明和接口体,例如 interf ...

随机推荐

  1. MySQL知识小结

    MySQL的知识面试中还是经常被问到的,简单的使用似乎无法达到面试官的要求,很多问题会关于Mysql存储引擎,所以这里还是需要系统学习一下Mysql的一些知识,面试过程中游刃有余. MySQL体系结构 ...

  2. VC++ 学习笔记2 列表框添加字符串

    向列表框添加字符串 现在知道两种方法 方法一:直接在需要添加内容地方输入下面代码  IDC_LIST1为需要添加列表框的ID号 改为你的 ((CListBox*)GetDlgItem(IDC_LIST ...

  3. 【C#】基础知识

    C#常用函数表1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=S ...

  4. iOS - 原生的CIFilter生成二维码和条形码

    使用CIFilter可以不引入任何第三方库,就可以生成想要的二维码和条形码,今天简单的介绍一下使用CIFilter生成二维码和条形码.系统CIFilter生成的二维码和条形码的大小有时并不能满足需求, ...

  5. 'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件.

    添加path内容: %SystemRoot%\system32; %SystemRoot%; %SystemRoot%\System32\Wbem;

  6. yii---实现加一或减一

    废话少说,直接看: /** * 添加帖子的浏览数 * @author fyz */ public function addViewNum($threadId){ $list = ForumThread ...

  7. Linux查看磁盘目录内存空间使用情况

    du 显示每个文件和目录的磁盘使用空间 命令参数 -c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和. -s或--summarize  仅显示总计,只列出最后加总的 ...

  8. ELK之使用filebeat的多行过滤插件把多行合并成一行

    java运行日志一般有多行,格式类似如下 格式为:日期 + 日志级别 + 日志信息 有些日志是多行的,需要使用filebeat多行插件把多行合并成一行 未使用多行插件的日志格式 修改filebeat配 ...

  9. spark-sklearn(spark扩展scikitlearn)

    (1)官方规定安装条件:此包装具有以下要求: -*最新版本的scikit学习. 版本0.17已经过测试,旧版本也可以使用.- *Spark> = 2.0. Spark可以从对应官网下载[Spar ...

  10. 注意:darknet安装

    参考:https://github.com/AlexeyAB/darknet # 一.安装 ## linux下安装 - 在darknet目录下执行make ## windows下安装 1. 安装vs2 ...