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

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

教材学习内容总结

第11章 异常

- 异常处理:

1.错误和异常都是对象,代表非正常情况或无效处理。

2.常见的异常问题:

- 试图做除以0的操作。
- 数组索引越界。
- 找不到指定的文件。
- 不能正常完成被请求的I/O操作。
- 使用了空引用。
- 执行的操作违反了某种安全规则。

3.处理异常的三种方法

- 根本不处理异常。
- 当异常发生时处理异常。
- 在程序的某个位置集中处理异常。
- 未捕获的异常:

1.异常抛出时所输出的信息,提供了方法调用堆栈踪迹。

2.如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息。第一行异常信息表明抛出的是什么异常,并提供了抛出该异常的原因。其他行的信息是方法调用踪迹信息,指明异常在何处发生。通过调用被抛出异常类的方法,也可以获得调用堆栈踪迹。getMessage方法返回一个字符串,解释异常抛出的原因;printStackTrace方法输出调用堆栈踪迹信息。

- try-catch语句:

1.ry-catch语句用来标志可能抛出异常的语句块,catch子句跟在try语句块后,用于定义如何处理一种指定的异常。

2.try { 语句块 } catch(类型名 标识符) { 语句块 }

3.执行try语句块时,如果没有异常抛出,将继续执行try-catch结构语句后的语句,这是正常情况执行流程。

4.如果try语句块执行的任何位置抛出了异常,并且存在catch子句,则控制立即转移到相应的catch子句处理异常,即控制转移到第一个与抛出异常相匹配的catch子句执行,执行完之后,跳出try-catch语句结构继续执行。

- finally子句:

1.有点像switch语句中的default语句,无论怎么样,这个语句一定会执行。如果有finally子句,那一定要排在catch子句后,除非没有catch子句。无论try语句块正常退出或由于抛出异常而退出,都将执行finally子句,因此可以利用finally子句管理资源或保证一定执行某段代码。

- 异常的传递:

1.如果在上级调用方法中仍然没有捕获和处理下级传上来的异常,则控制将返回到上级调用方法的更上一级调用方法,这个过程叫做传递异常。异常将一直传递下去,直到被捕获和处理,或直到异常传递出main方法,这时将终止程序的运行并产生错误信息。

2.如果在一个异常的发生处没有处理和捕获异常,控制将立即返回产生该异常的方法的上一级调用方法,因此可以将程序设计为在上级调用方法(外层调用)中捕获和处理异常。

- 异常类参次结构:

1.定义各种的类由继承关系关联在一起。

Throwable是Error类和Exception类的父类。许多异常的类型都是由Exception

类派生,而在这些类中也有许多子类。

虽然这些高层的类定义在java.lang包里,但定义各种异常的子类却分散定义在其他几个包中,继承关系可以跨包越界。

2.【自定义异常】:我们可以从Exception类或它的后代类派生一个新类,定义自己的异常,选择什么类作为父类由新异常所代表的问题和条件决定。

3.【可检测异常和不可检测异常】:Java中唯一不能检测的异常是RuntimeException类的对象或该类的后代类服务对象。所有其他的异常都是可检测异常。

可检测异常:必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来。

在方法定义的声明头中加throws子句就明确了该方法在异常发生时将抛出异常或者传递异常。main方法之所以需要throws子句,是因为它所抛出的异常类由由Exception类派生,从而使得它的子类是一个可检测异常。

不可检测异常:无需throws子句。

- I/O(输入/输出)异常:

1.标准I/O流有三种:

2.| 标准I/O流 | 说明 |

| -------- | :----------------:|

|System.in |标准输入流|

|System.out |标准输出流|

|System.err |标准错误流(输出错误信息)|

第12章 递归

- 递归思想:

1.递归是一种方法能够调用自己的编程技术,掌握递归编程的关键是能以递归的思想考虑问题。

- 无穷递归和有穷递归:

1.只有递归定义部分就变成了无穷递归,所以在任何递归定义中必须要有成为基本情况的非递归定义部分,才能使递归最终结束。

- 递归编程:

1.每一次对方法的递归调用,都会创建新的局部变量与参数。

2.每次递归都需要新增内存空间,因此无穷递归常产生运行时错误,报告内存耗尽的错误信息。

- 直接递归和间接递归:

1.方法调用自己的递归,称为直接递归;如果一个方法调用其他方法,最终导致再次调用自己,则称为间接递归。

- 递归应用:

1.迷宫问题和汉诺塔问题。

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

  • 问题1:递归与迭代的关系与区别?
  • 问题1解决方案:

1: 使用递归要注意的有两点:

1)递归就是在过程或函数里面调用自身;
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.

2:递归分为两个阶段:

1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.
  • 问题2:字节流和字符流到底是什么?为什么在I/O异常这节提到了?定义在java.io包中的那么多方法都怎么系统的理解?
  • 问题2解决方案:
区别

实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件![](https://images2018.cnblogs.com/blog/1333119/201805/1333119-20180517191455594-1618495632.jpg)

程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)。

上周考试错题总结

  • 第一题:Which of the following is not true of the RuntimeExceptions class?

    A .All RuntimeExceptions throw checked exceptions

    B .All RuntimeExceptions are Throwable objects

    C .RuntimeException has child classes ArithmeticException and NullPointerException

    D .RuntimeException objects are not Error objects

    E .All of the above are true

  • 分析:运行时异常是可抛出的对象,并不是错误类的一部分,而两种类型的runtimeexception是算术异常和NullPointerException。不属于运行时异常的异常包括各种检查异常,但运行时异常不被检查异常。
  • 第二题:The term "exception propagation" means

    A .an exception is caught by the first catch clause

    B .an exception not caught by the first catch clause is caught by an outer (enclosing) catch clause

    C .exceptions are caught, sequentially, by catch clauses in the current try block

    D .exceptions always are caught by the outermost try block

    E .none of the above

  • 分析:异常传播意味着一个异常被匹配的catch子句在当前try块级别,如果没有匹配,然后在下一个封闭try块级别,等等,直到异常已经被匹配的条款或异常的主程序和被Java虚拟机。
  • 第三题:In order to define a keyboard input object, keyboard, you could use the instruction:

    BufferedReader keyboard = new BufferedReader(System.in);

    A .true

    B .false

  • 分析:一个BufferedReader对象必须用Reader对象构建。系统。in是一个输入流对象。为了使用上述定义,必须将BufferedReader构造函数中的对象更改为(新的InputStreamReader(System.in))。一份法律声明。

代码托管

点评过的同学博客和代码

  • 本周结对学习情况

    • [20172317]
    • 20172320
    • 结对学习内容
    • 教材第11,12章
    • 阅读11.1-11.6、12.1-12.3章节
    • 完成课后自测题,并参考答案学习
    • 完成课后练习题
    • 完成程序设计项目:至少完成PP11.1、PP11.2、PP12.1、PP12.9

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

概念很多,嘚仔细看,有很多细节,和前面的章节联系紧密。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 95/95 1/1 18/18
第二周 515/620 1/2 22/40
第三周 290/910 1/3 20/60
第四周 1741/2651 1/4 30/84
第五周 579/3230 1/5 20/104
第六周 599/3829 2/8 18/122
第七周 732/4561 2/9 24/146
第八周 1354/5915 2/11 30/176
第九周 不知为啥,代码无缘无故少了300行,我现在很迷

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:30小时
  • 实际学习时间:30小时
  • 改进情况:无

(有空多看看现代软件工程 课件

软件工程师能力自我评价表)

参考资料

原文地址:https://www.cnblogs.com/mrf1209/p/9064940.html

时间: 2024-10-13 14:50:06

20172327 2017-2018-2 《程序设计与数据结构》第十周学习总结的相关文章

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

20172327 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 字符串的拼接和转义序列的使用 变量的声明和使用 讨论语法及表达式的处理 定义数据转换类型和实现类型转换的机制 创建Scanner类 教材学习中的问题和解决问题 暂无 代码学习中的问题和解决过程 问题1:在提交过程中,突然遇到无法上传的情况 问题2解决方案:通过上网查找,输入git pull之后弹出一个编辑框,选择关闭之后,再次用git push就成功了. 问题2:在按照例题2.10打代码时,Jav

20172327 2018-2019-1 《程序设计与数据结构》第九周学习总结

20172327 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 无向图 1.图的概念(非线性结构):允许树中每个结点与多个结点相连,不分父子结点. 2.图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的定点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 3.无向图:顶点之间无序连接. 如:边(A,B)意味着A与B之间的连接是双向的,与(B,A)的含义一样. 4.邻接(邻居):两个顶点之间有边连接. 5.自

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

20172305 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书的第一章简单的介绍了计算机和JAVA的历史,基础内容很多,代码的讲解还没用正式进入,本周一直在做敲代码的准备,简单敲了老师给的"Hello World!"以及书后的PP1.3.PP1.4等简单的小程序. 教材学习中的问题和解决过程 问题1:三种不同类型的错误,运行错误和逻辑错误的混淆 问题1解决方案:针对EX1.20的"希望做加法时却做里乘法"进行了网上

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

20172314 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书第一章为计算机系统概述,前面是一些计算机相关的基础知识,让我对计算机有了一个总体的认识,不再是一片空白了,对主存储器和CPU影响深刻,主存储器用于保存程序和数据,CPU执行程序指令.在接下来的Java编程语言与程序开发部分,开始看的时候有点迷茫,不是很理解,后来先按照作业中附带的流程完成一些代码托管之后,接触了完整的简单的程序之后,再回过头来看书,看到的一些陌生的名词在脑海中就有了实际的对应,

20172317《程序设计与数据结构》第一周学习总结

20172317 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 重新温习了一遍计算机的基础 总算了解了局域网广域网因特网万维网这些东西之间的区别了 通过URL的例子知道了网址各个部分的含义 对Java编程语言和程序开发有了一个粗浅的了解 教材学习中的问题和解决过程 问题:练习题SR1.13出现了答案与题目不相符的情况 问题解决方案:题中有个选项是"网卡",答案中没有,反而有个题目没有的选项"调制解调器"(俗称"

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

20172322 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 了解了print与println的区别 了解了字符串的拼接可以用+来完成 了解了转义字符的使用 学会了使用赋值 学会使用部分算术运算符 学会了使用Scanner来实现交互性 教材学习中的问题和解决过程 问题1:在最初接触赋值时对foalt和double的赋值范围不了解 问题1解决方案:使用万能的度娘后看到一个高赞答案后有了了解 问题2:在提前预习时看到2.7图形后敲入的代码无法执行 问题2解决方案

20172328《程序设计与数据结构》第二周学习总结

20172328李馨雨<程序设计与数据结构>第二周学习总结 又到周五,李馨雨同学要开始写博客了.让我们开始吧!(????) 教材学习内容总结 1.首先是String类定义的字符串,然后是print和println的区别.转义字符的学习.(让我印象深刻的\b[回车符]在字符串结尾不显示哈哈,及其更新的\t[换行符],还有在课堂上真正明白了什么是回车.) 2.了解变量.常量.赋值语句.变量:保存数据的内存单元.常量:坚定自己不会变的数据!除非你用java的反射(有点复杂,改权限.去修饰符等等.没实

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20172326 《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

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

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In