20155302 2016-2017-2《Java程序设计》第五周学习总结

20155302 2016-2017-2 《Java程序设计》第5周学习总结

教材学习内容总结

  • 异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
  • Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行
  • Java语言提供两种异常处理机制:捕获异常和声明抛弃异常;
    捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:
    try{ ... }catch(ExceptionName1 e){ ... }catch(ExceptionName2 e){ ... } ... }finally{ ... }
    声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:
    public int read() throws IOException{ ... }
  • Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
  • Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
  • Collection接口是 Set 、List 和 Queue 接口的父接口,提供了多数集合常用的方法声明,包括 add()、remove()、contains() 、size() 、iterator() 等。
  • List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) indexOf(Object o) 。
  • 支持队列操作的Queue收集的对象加入至尾端,取得对象时从前端,则可以使用Queue接口的操作的对象,Queue定义了自己的offer()、poll()、peek()等方法最主要差别在于,add()、remove()、element()、等方法操作失败时会抛出异常,而offer()、poll()与peek()等方法操作失败时会返回特定值。
  • 无论List、Set还是Queue都会有个iterator()方法,是定义在Collection接口中,而List、Set、Queue继承自Collection,所以也都拥有iterator()的行为。
  • 对多异常处理 1.声明异常时,建议声明更为具体的异常,这样处理得可以更具体 2.声明几个异常,就对应有几个catch块,不要定义多余的catch快。 如果有多个catch块中的异常出现继承关系,父类异常catch块放在下面。
  • 异常对象包含的常用方法: 1.getMessage();返回该异常的详细描述字符 2.printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。 3.printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流 4.getStackTrace():返回该异常的跟踪栈信息。

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

JAVA里的异常处理有什么用?为什么不直接改?既然说执行的时候出错的为什么还要那么麻烦使用try-catch 和throw,throws?执行出错了Java告诉我错在哪里了直接改不就好了,比如我写代码的时候写1/0。执行的时候系统直接给出ArithmeticException为啥还要那么辛苦try{1/0}catch(ArithmeticException){解决的方法}?

解答:(在百度上找到了答案)输入图片说明

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

public static void main(String[] args) {
//"abcadfasdffdsa"输出对应字母和次数
String str ="abcadfasdffdsa";
char[] arr = str.toCharArray();
HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
Iterator<Character> it = hm.keySet().iterator();
for(int i=0 ; i<arr.length;i++){
Integer value = hm.get(arr[i]);
int count = 1;
if(value!=null){
count = value+1;
}
hm.put(arr[i], count);
}
System.out.println(hm.toString());//第一个输出

while(it.hasNext()){ //为什么没有出来?
Character key = it.next();
System.out.println(key.toString()+":"+hm.get(key).toString());//第二个输出
}
}

目的是输出字母出现的次数,但是在下面我遍历的时候怎么都不能出结果,只有第一个输出了结果,第二个不出结果。

解答:将地址传递和值传递弄混淆了。HashMap<Character, Integer> hm = new HashMap<Character, Integer>(); Iterator<Character> it = hm.keySet().iterator();这里,hm 集合中还没有数据 所以 it 里面还没有数据 后面即是将 hm装入了数据,其it依然没有数据 可以将Iterator<Character> it = hm.keySet().iterator();放在 while(it.hasNext()){这句之前就行了。经大神指点,将代码精简完善了一下

	public static void main(String[] args { //"abcadfasdffdsa"输出对应字母和次数
	String str ="abcadfasdffdsa";
	HashMap<Object, Integer> hm = new HashMap<Object, Integer>()`;
	for(int i=0 ; i<str.length;i++){
		Integer value = hm.get(str.charAt(i));
		int count = 1;
		if(value!=null){
			count = value+1;
		}
		hm.put(str.charAt(i)), count);
	}
	System.out.println(hm.toString());
	for(String key : hm.keySet()) {
		System.out.println(key + ":"+hm.get(key));
	}
}

代码托管

输入图片说明
输入图片说明
输入图片说明

上周考试错题总结

  1. 填空:”Hello”.substring( 0,2 )的值是“He”
  2. CH06填空:写出编译P165 RPG.java的命令(javac –d . *.java)
  3. CH06 判断:final可以用在类,方法,变量前。(OK)
  4. CH06填空:实现一个类中的equals()方法时,一定要同时实现(hashCode())方法
  5. CH07 填空:实现接口表示(拥有行为),但不是ISA关系。
  6. CH07 填空:用enum定义一个Season的类型表示四季(public enum Season{SPRING, SUMMER, AUTUMN,WINTER})。
  7. CH07 填空:面向对象中,设计经验可以用(设计模式)表达

结对及互评

与我结对的是20155322秦诗茂同学,相比于他的学习,我感到自己在一些繁琐的Java编程中显得水平不够,但是秦诗茂同学在编程方面功力扎实,这是值得我学习的地方,我也经常缠着他问东问西,以此来提高自己的编程水平,希望我们下周能练习更多的代码,共同进步。

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分

点评模板:

  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
  • 参考示例

点评过的同学博客和代码

http://www.cnblogs.com/blackay03/p/6624646.html

本周学习感悟

随着Java学习的深入,后面的知识越来越难越来越烦琐了,这就要求我们加大对自己的管理力度,严于律己,勤动手打代码,要做到一天多次提交代码,只有练习量跟上去了,学习才会变轻松,才能将知识学熟学透。另外,遇到不会的问题多动手百度,很多知识百度上面都有,另外,脚本之家和CSDN等网站上都对Java的学习内容和问题有详细的解答和概述,书看不懂了可以去网上,换一种方式理解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 2/2 20/20
第二周 140/160 2/4 18/38
第三周 113/273 1/5 20/58
第四周 335/608 1/6 20/78
第五周 1159/1767 1/7 30/108
posted @ 2017-03-26 20:00  乐舞歌不是可爱送  阅读(188)  评论(7编辑  收藏  举报
Live2D