20172324 2017-2018-2 《程序设计与数据结构》第九周学习总结
20172324 2017-2018-2 《程序设计与数据结构》第九周学习总结
教材学习内容总结
-
异常
-
在 Java 中,所有的异常都有一个共同的祖先 Throwable。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。
-
Java的异常(包括Exception和Error)分为可查的异常(编译器要求必须处置的异常)和不可查的异常(编译器不要求强制处置的异常)。
-
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。
-
在Java中,异常通过try-catch语句捕获。其一般语法形式为:
-
try {
// 可能会发生异常的程序代码
} catch (Type1 id1){
// 捕获并处置try抛出的异常类型Type1
}
匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。
教材学习中的问题和解决过程
- 问题1: 异常和 错误有什么不同。
- 问题1解决方案:异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。
Exception(异常):是程序本身可以处理的异常。
Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
简单来说,异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。
- 问题2:有无finally的区别
- 问题2解决方案:在上面说明的try-catch语句的语法格式,下面这个就是有了finally语句的语法格式
try {
// 可能会发生异常的程序代码
} catch (Type1 id1) {
// 捕获并处理try抛出的异常类型Type1
} finally {
// 无论是否发生异常,都将执行的语句块
}
但是finally也有不被执行的情况,在以下4种特殊情况下,finally块不会被执行:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。
-
问题3:throw和throws的差别。
-
问题3解决方案:
-
throws: 用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常 -
throw:
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名 表示抛出异常,由方法体内的语句处理 throw则是抛出了异常,执行throw则一定抛出了某种异常
-
-
问题4:IO流
-
问题4解决方案:I/O异常有可能产生的异常太多了,我选择看API
-
问题5:迭代和递归的差别
-
问题5解决方案:简单来睡,迭代与递归其实都可以解决同一个问题,重点在于哪个方法更方便。下面用一个简单的例子来说一下迭代与递归的区别
电影故事例证:
迭代——《明日边缘》
递归——《盗梦空间》
递归:
】】】
】】】】】】
...
】】】】】】】】】
】】】】】】】】】】】】
】】】】】】】】】
...
】】】】】】
】】】
迭代:
】】】
】】】
】】】
】】】
...
】】】
】
代码调试中的问题和解决过程
-
问题1:上周遇到的sorting无法编译的问题
-
问题1解决方案:解决办法是在类前面加@SuppressWarnings("unchecked"),然后编译的时候加上-Xlint:unchecked
-
问题2:要如何解决识别done停止的问题,我之前做的尝试不是死循环就是有没有done都能得到一样的结果
-
问题2解决方案:
str.length() -4 , str.length() ).equals("DONE")
利用这个识别是否有DONE的部分
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
-
Polymorphism is achieved by
A . overloading
B . overriding
C . embedding
D . abstraction
E . encapsulation
overloading重载 overriding重写 实现多态要重写里面的方法 -
Which statement is completely true?
A . Java upcasts automatically, but you must explicitly downcast
B . Java downcasts automatically, but you must explicitly upcast
C . Java expects the user to explicitly upcast and downcast
D . Java will both upcast and downcast automatically
E . The rules for upcasting and downcasting depend upon whether classes are declared public, protected, or private
Java会自动向上转换,但您必须显式地向下转换 -
Can a program exhibit polymorphism if it only implements early binding?
A . Yes, because one form of polymorphism is overloading
B . No, because without late binding polymorphism cannot be supported
C . Yes, because so long as the programs uses inheritance and/or interfaces it supports polymorphism
D . Yes, because early binding has nothing to do with polymorphism
E . none of the above
早期绑定不能称为多态,重载只是为具有不同参数列表的方法提供了替代方法。 -
The fact that the System.out.println( ) method is able to handle such a wide variety of objects, and print them correctly, is an example of the polymorphic nature of the println( ) method.
A . true
B . false
println()在本质上是高度多态的。 -
A class reference can refer to any object of any class that descends from the class.
A . true
B . false
这是使用类名来声明引用变量
结对及互评
写在评论里
点评过的同学博客和代码
- 本周结对学习情况
其他(感悟、思考等,可选)
🙂
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/2 | 20/20 | |
第二周 | 329/500 | 2/3 | 18/38 | |
第三周 | 619/1000 | 2/5 | 22/60 | |
第四周 | 817/1734 | 2/7 | 38/98 | |
第五周 | 674/2408 | 1/9 | 30/128 | |
第六周 | 1136/2870 | 2/10 | 30/158 | |
第七周 | 1000/3791 | 1/11 | 32/190 | |
第八周 | 2662/6453 | 2/13 | 48/238 | |
第九周 | 782/7573 | 2/15 | 48/238 |