首页 > 技术文章 > 20145302张薇《Java程序设计》第五周学习总结

5302v 2016-04-03 16:48 原文

20145302 《Java程序设计》第五周学习总结

教材学习内容总结

第八章

  • try catch
  1. JVM会先尝试执行try区块中的内容,若发生错误且与catch后面的类型相符,则执行catch区块中的代码。
  2. 若想在捕捉(catch)错误之后恢复程序正常执行流程,可以将try、catch区块放入while循环中。
  3. 由于JVM是尝试执行try区块,所以一旦发生错误被捕捉,那么这一次的try区块就相当于没有执行。
  • 异常继承架构
  1. 编译程序认为调用System.in.read()时可能发生错误,故要求一定要在程序中明确处理错误,解决方法如下:
try{
	int ch =System.in.read();
}catch(java.io.IOException ex){
	ex.printStackTrace();
}

  1. 设计错误对象都继承自java.lang.Throwable类,他有两个子类:java.lang.Error类与java.lang.Exception类。
  2. Error与其子类代表严重系统错误,如硬件层面错误、JVM错误或内存不足等问题。当Error出现时,基本是无力回天的。
  3. 若某个方法声明会抛出Throwable或子类实例,只要不属于Error java.lang.RuntimeException或其子类实例,你就必须明确使用try、catch语法处理,或者使用throws声明这个方法会抛出异常,否则编译会失败。
  4. 受检异常:API客户端必须明确处理错误。
  5. 非受检异常:编译程序不强迫API客户端在语法上进行处理,但是有可能会引发错误。
  6. 规则表示式:String的matches()方法设定\\d*,用于检查字符串中的字符是不是数字,是则返回ture。

static int nextInt(){
	String input =console.next();
	while(!input.matches(\\d*)){
		System.out.println(“请输入数字”);
		input =console.next();
	}
	return Integer.parseInt(input);
}

  1. 若父类异常对象在子类异常对象前被catch,那么catch子类异常对象的区块将永远不会被执行。
  2. 多重捕捉语法。注意catch括号中列出的异常不得有继承关系,否则编译错误。JDK7后,以下两段代码相等。
try{
	do something...
}catch(IOException e){
	e.printStackTrace();
}catch(InterruptedException e){
	e.printStackTrace();
}catch(ClassCastException e){
	e.printStackTrace();
}

try{
	do something...
}catch(IOException | InterruptedException | ClassCastException e){
	e.printStackTrace();
}

  • 要抓还是抛主要是throw的用法。
  • 如若使用继承时,父类某个方法声明throws某些异常,子类重新定义该方法时:
  1. 可以不声明throws任何异常。
  2. 可以throws父类该方法中声明的某些异常。
  3. 可以throws父类该方法中声明异常的子类。
  4. 不可以throws父类方法中未声明的其他异常。
  5. 不可以throws父类方法中声明异常的父类。
  • 贴心还是麻烦我感觉挺麻烦的,虽然他有用,但是还是麻烦。
  • 使用finally无论你想干什么,最后一定要执行关闭资源的动作。try、catch语法可以搭配使用,无论try区块中有无发生异常,若有finally区块,则一定会被执行。
  • java.lang.AutoCloseable在try括号中,越后面撰写的对象资源会越早关闭。
    第九章
  • 具有索引的List
  1. ArrayList一般在线性结构时使用。
  2. LinkedList一般在链接结构时使用。
  • 内容不重复的set顾名思义,内容不重复,set是一个用来找不重复的接口。

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

  • 问题1throw ex;是嘛?
  • 问题2throw到底是干啥用的,我原以为我把代码运行一遍就可以感受到他的作用,结果……我的心好累,我还是不明白。

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

  • 问题1之前我先用C编写了一个程序,想先把程序粘过来然后改成java的格式,然后我将那个文件关闭,创建了一个新文件来敲书上的代码,运行时选择的是新敲的代码名称,但是结果出来如下:

为什么运行了Card52,而不是新敲的代码,这我就很不懂了,咋回事。

  • 解决过程1我将Card52里面的程序内容都删除了,然后又运行了一遍,结果如下:

  • 问题2敲教材P236代码,在运行的时候没有FileUtil选项,不知道这是否与文件的存取有关。

  • 解决过程2结果……8.2.1就说了8.1.3节撰写的FileUtil范例不是很正确……大兄弟你早说啊……

本周代码托管截图


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

  • 想说一下这周小测验的感受,真的从发卷我就懵了,脑子一片混沌,不明白题目要干啥,不知道从何下笔,是只用写这一段?还是主程序也要写?脑子乱乱的,我的天,现在想想,我的心理素质好差啊。其实,最重要的原因还是实践少了,自己编的代码少,你能看懂再多的代码,也不如自己亲自编上一段。学C语言的时候,我就是靠编代码来学的,还是得靠实践来锻炼自己。
  • 看书看到一处不懂,接着看,发现知识联系的很紧密,一个一个的小土堆就会积成一座大山,让人望而却步。
  • 这两章都是陌生的东西,要想弄懂各种具体事例,前几章的基础很重要。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 1500行 15篇 400小时
第一周 10/10 2/2 10/10 基础知识
第二周 50/100 3/3 35/35 语法知识
第三周 100/300 4/4 60/60 了解对象
第四周 150/500 5/5 75/90 面向对象
第五周 200/700 6/6 90/120 处理异常

参考资料

推荐阅读