20172324 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172324 2017-2018-2 《程序设计与数据结构》第九周学习总结

教材学习内容总结

  • 异常

    1. 在 Java 中,所有的异常都有一个共同的祖先 Throwable。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。

    2. Java的异常(包括Exception和Error)分为可查的异常(编译器要求必须处置的异常)和不可查的异常(编译器不要求强制处置的异常)。

    3. 在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。

    4. 在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脚本的运行结果截图)

上周考试错题总结

  1. Polymorphism is achieved by
    A . overloading
    B . overriding
    C . embedding
    D . abstraction
    E . encapsulation
    overloading重载 overriding重写 实现多态要重写里面的方法

  2. 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会自动向上转换,但您必须显式地向下转换

  3. 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
    早期绑定不能称为多态,重载只是为具有不同参数列表的方法提供了替代方法。

  4. 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()在本质上是高度多态的。

  5. 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

参考资料

posted @ 2018-05-13 21:05  amberR  阅读(223)  评论(1编辑  收藏  举报
/*头部导航栏*/ #navigator { font-size:15px; border-bottom: 1px solid #ededed; border-top: 1px solid #ededed; height: 60px;/*导航栏高度,原始50*/ clear: both; margin-top: 25px; } /*导航栏设置,可以自定义导航栏的目录*/ #navList { min-height: 35px; float: left; } #navList li { /*每一个栏目节点*/ float: left; margin: 0 5px 0 0; /*这里原来是0 40px 0 0 */ } #navList a { /*栏目文字的格式*/ display: block; width: 5em; height: 22px; float: left; text-align: center; padding-top: 19px; }