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

教材学习内容总结

·由于在编程的时候会遇到因各种原因而导致的错误,于是我们可以使用"try"、"catch"组成的语法捕捉错误:

    try {
…………
}
catch(ArrayIndexOutOfBoundsException ex) {
…………
}

·在执行try区域中的语句如果发生错误,执行程序就会跳过有错的地方并将错误与catch括号中声明的类型比较,如果符合则执行接下来catch{……}中的语句。

·错误会被包装成对象,都继承自java.lang.Throwable类,两个子类java.lang.Error和java.lang.Exception在使用上有所不同。Error与其子类表示严重系统错误,基本上出现的这种错误不用处理。而Exception和其子类表示的是程序设计上本身的错误。

·如果某个方法声明抛出Throwable或子类实例,只要不是属于Error或者java.lang.RuntimeException及子类实例,就需要使用try/catch语法进行处理。

·在使用try/catch语法捕捉错误时,如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将不会被执行。也就是当我们想要完成程序的编译时,我们必须更改程序中对异常对象捕捉的顺序。

        try {
throw new ArithmeticException("例外测試");
}
catch(Exceptione) {
System.out.println(e.toString());
}
catch(ArithmeticException e) {
System.out.println(e.toString());
}

更改后为:

        try {
throw new ArithmeticException("例外测試");
}
catch(ArithmeticException e) {
System.out.println(e.toString());
}
catch(Exception e) {
System.out.println(e.toString());
}

·如果出现几个catch区块在做同样的事,例如:

        try{
XXX
}catch(IOException e)
{
同样的事;
}catch(InterruptedException e)
{
同样的事;
}catch(ClassCastException e)
{
同样的事;
}……

可以使用多重语法使程序简化:(注意:catch括号中列出的异常不得有继承关系!)


try{
XXX
}catch(IOException|InterrupedException |ClassCastException e)
{
同样的事;
}

·如果操作对象的过程中抛出受检异常但是当前环境信息不足以处理异常,即无法使用try/catch语法,可由方法的客户端依据当时调用的环境信息进行处理,所以这时候我们要用throws声明此方法会抛出的异常类型或父类型。比如:

        try {
double data = 100 / 0.0;
System.out.println("浮点数零除:" + data);
if(String.valueOf(data).equals("Infinity"))
throw new ArithmeticException("除零例外");
}
catch(ArithmeticException e) {
System.out.println(e);
}

·在catch区块进行错误处理后可用throw将异常再抛出。

·如果想得知异常发生的根源可以利用异常对象自动收集的堆栈追踪:

1、最简单的方法就是直接调用异常对象的printStackTrace()方法。

2、如果想得取得个别堆栈追踪元素进行处理,使用getStackTrace()方法。

3、如果想要让异常堆栈起点为重抛异常的地方,使用fillInstackTrace()方法

·Finally区块:无论try区块中是否有异常,只要撰写了finally区块,则该区块一定会被执行。如果在程序撰写的流程中出现了return,则先执行finally区块内容,再将结果所取得的值通过return返回。

·收集对象的行为(比如add()方法、remove()方法,都是定义在java.util.Collection中。对对象进行操作的行为,就是java.lang.Iterable定义的行为。

`如果希望收集时记录每个对象的索引顺序,并且取回对象,这样的行为定义在java.lang.List中

(1)如果希望手机的对象不重复,具有集合的行为,则由java.util.Set定义。

(2)如果希望收集对象时以队列方式,收集的对象加入至尾端,取得对象时从前端开始,则由java.util.Queue定义。

(3)如果希望对Queue的两端进行加入或移除操作,则使用java.util.Deque。

·List可以使用数组(Array)或是链结串行(LinkedList)来实作这个特性。对于循序加入与存取,使用ArrayList的效率比较好。对于经常变动元素排列顺序的需求,使用LinkedList会比较好

·ArrayList实例:

        Scanner scanner = new Scanner(System.in);

        List<String> list = new ArrayList<String>();

        System.out.println("输入名称(使用quit结束)");
while(true) {
System.out.print("# ");
String input = scanner.next();
if(input.equals("quit"))
break;
list.add(input);
} System.out.print("显示输入: ");
for(int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + " ");
System.out.println();

·无论List 、Set还是Queue,都有iterator()方法。在JDK5以后,增强式for循环语句可用在数组上,也可用在Interable接口的对象上——编译程序蜜糖:

 for(String s : list) {
System.out.print(s + " ");
}//使用foreach来遍访List中的元素

·利用java.util.Map接口的操作对象来建立键值对应数据,之后可以用键迅速取得值。

·判断键是否重复是根据hashCode()和equals(),作为键的对象必须操作这两个方法。

·HashMap的使用举例:

        Map<String, String> map =
new HashMap<String, String>();
String key1 = "caterpillar";
String key2 = "justin";
map.put(key1, "caterpillar的讯息");
map.put(key2, "justin的讯息"); System.out.println(map.get(key1));
System.out.println(map.get(key2));

·取得Map中所有的值,可以用values()返回Collection对象。取得Map的键与值可以用entrySet()方法,调用getKey()取得键,调用getValue()取得值。

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

书上在介绍try/catch的使用方法的时候举了几个例子,但是当我把代码敲到程序中时出现了错误:

仔细检查之后我发现在程序一开始的地方我添加的import只有import java.util.Scanner;但是如果想要运行catch后括号内的内容,必须要再添加一个关于InputMismatchException的import,也就是说改为:

import java.util.InputMismatchException;
import java.util.Scanner;

(ps:书上后面举得例子中所用的方法则是直接添加了java.util.*)

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

这两章书上的代码很多很长,如果只是机械地敲代码运行程序,那么学习效率也不高,并且也学不到什么东西。还不如用敲代码的时间多琢磨琢磨书上的代码到底是什么意思。盲目地去将书上的代码都试一遍不是学习的关键,重点在于你要弄懂代码里所运用了哪些知识点,慢慢累积起来,才能获得收获。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 20篇 400小时
第一周 200/200 1/1 15/12
第二周 180/380 1/1 18/12
第三周 600/980 1/1 17/16
第四周 400/1380 1/1 16/15
第五周 300/1680 1/1 14/14

代码托管截图

参考资料

20145223《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. jquery $(document).ready() 与window.onload的异同

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的.   1.执行时间     ...

  2. java实现批量上传(swfupload)

    下载 swfupload 文件夹 里面包含handlers.js,swfupload.js,swfupload.swf 三个文件. 我的是和ssh项目整合在一起的.因为struts2的拦截器会拦截所有 ...

  3. JavaEE编码题

    1.请编写代码实现登录效果(5分) 要求: 1)手写出相应的HTML和CSS代码 2)字体大小12px,表格宽300px,按钮行占两列并水平居中, 3)可以写在style节点内,也可使用行内CSS或者 ...

  4. MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务

    目录(?)[-] 1下载安装 2MongoDB CRUD 1创建数据 2更新数据 3删除 4查询 5更多方法 3MongoDB可视化工具 4总结   本文原文连接: http://blog.csdn. ...

  5. 靶形数独(codevs 1174)

    1174 靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  6. C --gettimeofday===获取某个程序经历的时间

    #include <stdio.h> #include <sys/time.h> #include <time.h> int gettimeofday(struct ...

  7. eclipse使用时jar不在libraries

    jar是在项目工程的目录下 点击工程右键 这样jar包边收到librarles中

  8. React Native实例之房产搜索APP

    React Native 开发越来越火了,web app也是未来的潮流, 现在react native已经可以完成一些最基本的功能. 通过开发一些简单的应用, 可以更加熟练的掌握 RN 的知识. 在学 ...

  9. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  10. Delphi管理多线程之线程局部存储:threadvar

    尽管多线程能够解决许多问题,但是同时它又给我们带来了很多的问题.其中主要的问题就是:对全局变量或句柄这样的全局资源如何访问?另外,当必须确保一个线程中的某些事件要在另一个线程中的其他时间之前(或之后) ...