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子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。1332976-20180513205639163-1657810117.jpg

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。
1332976-20180513210411687-190255868.jpg

  • 问题3:throw和throws的差别。
  • 问题3解决方案:

    • throws: 用在方法声明后面,跟的是异常类名
      可以跟多个异常类名,用逗号隔开
      表示抛出异常,由该方法的调用者来处理
      throws表示出现异常的一种可能性,并不一定会发生这些异常

    • throw:
      用在方法体内,跟的是异常对象名
      只能抛出一个异常对象名 表示抛出异常,由方法体内的语句处理 throw则是抛出了异常,执行throw则一定抛出了某种异常

  • 问题4:IO流
  • 问题4解决方案:I/O异常有可能产生的异常太多了,我选择看API
  • 问题5:迭代和递归的差别
  • 问题5解决方案:简单来睡,迭代与递归其实都可以解决同一个问题,重点在于哪个方法更方便。下面用一个简单的例子来说一下迭代与递归的区别

电影故事例证:
迭代——《明日边缘》
递归——《盗梦空间》

递归:
】】】
】】】】】】
...
】】】】】】】】】
】】】】】】】】】】】】
】】】】】】】】】
...
】】】】】】
】】】
迭代:
】】】
】】】
】】】
】】】
...
】】】

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

  • 问题1:上周遇到的sorting无法编译的问题1332976-20180513205754573-816943534.png

  • 问题1解决方案:解决办法是在类前面加@SuppressWarnings("unchecked"),然后编译的时候加上-Xlint:unchecked
  • 问题2:要如何解决识别done停止的问题,我之前做的尝试不是死循环就是有没有done都能得到一样的结果
    1332976-20180514005544533-1418807599.png

  • 问题2解决方案:str.length() -4 , str.length() ).equals("DONE")利用这个识别是否有DONE的部分

代码托管

(statistics.sh脚本的运行结果截图)
1332976-20180513205829907-1750490719.png

上周考试错题总结

  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/2001/220/20
第二周329/5002/318/38
第三周619/10002/522/60
第四周817/17342/738/98
第五周674/24081/930/128
第六周1136/28702/1030/158
第七周1000/37911/1132/190
第八周2662/64532/1348/238
第九周782/75732/1548/238

参考资料

转载于:https://www.cnblogs.com/amberR/p/9033309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值