201823312019-2020-1《数据结构与面向对象程序设计》第6周学习总结

gao-kuanrang gao-kuanrang     2023-05-07     401

关键词:

20182331 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结

教材学习内容总结

  • 后绑定:

1.术语“多态性”可以理解为“有许多形式”,一个“多态性引用”是可以在不同时间指向不同类型对象的引用变量。利用多态性调用的方法能够由一个调用改变为另一个调用。

2.在多数情况下,绑定发生在编译阶段,但对于多态性引用,这种绑定要延迟到程序运行时才能执行。

3.后绑定的效率低于编译阶段绑定效率,因为后绑定需要在程序执行期间决定所要绑定的定义方法。

4.在Java中,可以用两种方式建立多态性引用:继承方式和接口方式。

  • 由继承实现多态性:

1.一个引用变量可以指向有继承关系的任何类的任何对象。

2.一个object引用可以指向任何对象,因为所有类归根结底都是object类的后代类。

3.实际将调用的方法版本取决于对象的类型而不是引用变量的类型。

4.多态性的实质是,每个类很清楚自己如何完成一个指定的行为,并从某种意义来讲,每个类的行为是相同的。多态机制允许用具有一致性但又独特的方式处理类似的对象。

  • 利用接口实现多态性:

1.类名可以用于声明对象引用变量,类似地,接口名也可以用做声明对象引用变量的类型。一个接口引用变量可以指向任何实现该接口的类的对象。

2.一个接口引用变量可以指向实现该接口的任何类的任何对象。

3.像基于继承的多态性引用一样(父类名可用做方法参数的类型),接口名也可以用做方法参数的类型,使得任何实现同意接口的类对象都可以作为参数传给方法。
第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 标准错误流(输出错误信息)

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

  • 问题1:接口类和抽象类
  • 问题1解决方案:1.接口类:常量+抽象方法。2.抽象类:常量/变量+抽象/非抽象方法。3.抽象类是用来捕捉子类的通用性的,它不能被实例化,只能用作子类的超类,抽象类是被用来创建继承层级里子类的模板。4.抽象类中的每一个抽象方法都必须使用abstract修饰符,抽象方法不使用final和static修饰符。

    问题2:字节流和字符流到底是什么?为什么在I/O异常这节提到了?定义在java.io包中的那么多方法都怎么系统的理解?
    问题2解决方案:

区别:实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件 技术图片
程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。

在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)。

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

  • 问题1:在做继承这一章的课后题的时候,关于抽象方法一直搞不明白
  • 问题1解决方案:父类中有抽象方法的话,子类必须实现这个抽象方法,不然的话也是一个抽象类。如果父类中有构造方法。那么子类中必须也有构造方法。
  • 问题2:在进行people继承的编程中一直不能运行
  • 问题2解决方案:多打了一个花括号,结果导致找不到主类

代码托管

上周考试错题总结

  • 问题1:Inheritance through an extended (derived) class supports which of the following concepts?
    A . interfaces
    B . modulary
    C . information hiding
    D . code reuse
    E . correctness
    解析:当继承一个已有类时,新类不必重新实现任何继承的方法或实例数据,从而为程序员节省了一项工作,提高了效率。因此,代码重用是一种重用其他人的代码的能力,它可以为我们的需要扩展它。

Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

  • 问题2:Which of the following is an example of multiple inheritance?
    A . A computer can be a mainframe or a PC
    B . A PC can be a desktop or a laptop
    C . A laptop is both a PC and a portable device
    D . A portable device is a lightweight device
    E . Macintosh and IBM PC are both types of PCs
    解析:多继承意味着一个新的派生类继承了不止一个父类。在上面列出的那些电脑中,一台笔记本电脑从个人电脑和便携设备上继承了一些属性,因此这属于多继承。A、B和E的答案都是单继承的例子,其中一个类至少有两个子类(在A中,计算机有主机和PC机;在B中,PC机有桌面和笔记本电脑,在E,PC机有Macintosh机和IBM 个人计算机),D表示一个类的一个属性。当时误选D项,以为成其他都是属于多继承。
  • 问题3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A . protected
    B . derivable
    C . cloneable
    D . polymorphic
    E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
    解析:一个被声明为一个类的对象可以引用该类的子类,这种方法是被称作为多态,这是在第十章中的内容,一个父类的对象是可以指向任何一个子类的一个对象,这种就是由多态所引起的。

多态是同一个行为具有多个不同表现形式或形态的能力。多态下允许将子类类型的指针赋值给父类类型的指针。

  • 问题4:In order to determine the type that a polymorphic variable refers to, the decision is made
    A . by the programmer at the time the program is written
    B . by the compiler at compile time
    C . by the operating system when the program is loaded into memory
    D . by the Java run-time environment at run time
    E . by the user at run time
    解析:这道题目是在问是在什么阶段确定多态变量所引用的类型,对于多数情况下的这种请求,这种绑定是发生在编译阶段,但是对于多态性引用,这种绑定要延迟到程序运行才能执行,并且要绑定的方法取决于当时引用变量所引用的对象,这种被延迟的请求事件被称为后绑定或动态绑定

  • 问题5: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。不属于运行时异常的异常包括各种检查异常,但运行时异常不被检查异常。
  • 问题6: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虚拟机。
  • 问题7: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))。一份法律声明。

结对及互评

  • 博客中值得学习的或问题:
    • 学习深刻,自己有方法
    • 代码中值得学习的或问题:
    • 使用继承减少代码的重复编写
    • 基于评分标准,我给本博客打分:100分。得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 一个问题加1分
    • 代码调试中的问题和解决过程, 一个问题加1分
    • 排版精美的加一分
    • 代码超过300行(加2分
    • 代码Commit Message规范的加1分
    • 有动手写新代码的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况
  • 20182309
    • 结对学习内容

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第五周 941/3639 2/11 24/157

参考资料

数据结构与算法|数据结构与算法学习目录

1.数据结构与算法初探(1)什么是数据结构a.“摆放图书”例子b.逻辑结构与存储结构c.抽象数据类型(2)什么是算法算法的定义算法的特性和设计要求算法的度量方法(时间复杂度&空间复杂度)(3)算法优化——最大子列... 查看详情

数据结构与算法-暴力递归与回溯

数据结构与算法-暴力递归与回溯目录博主介绍1、暴力递归和回溯1.1、暴力递归概念说明1.2、回溯算法概念说明1.3、逆序一个栈1.4、获取一个字符串的全部子序列1.5、转换结果1.6、全排列1.7、子集 查看详情

数据结构与算法解析——数据结构与算法简介

数据结构与算法解析(一)——数据结构与算法简介    本系列博客为学习狄泰学院《数据结构实战开发教程》笔记并根据网络资料总结而来。一、数据结构简介数据结构是相互间存在特定关系的数据的集合,分为... 查看详情

数据结构与算法全套数据结构笔记持续更新

目录【数据结构与算法】线性表的重要基本操作与代码实现【C语言版】【数据结构与算法】线性表的链式表示和实现,超详细【C语言版】【数据结构与算法】Leetcode2:两数相加【链表学习】【数据结构与算法】栈与队列... 查看详情

数据结构与算法全套数据结构笔记持续更新

目录【数据结构与算法】线性表的重要基本操作与代码实现【C语言版】【数据结构与算法】线性表的链式表示和实现,超详细【C语言版】【数据结构与算法】Leetcode2:两数相加【链表学习】【数据结构与算法】栈与队列... 查看详情

android-从本质层面了解数据结构与算法

从本质层面了解数据结构与算法技术点  1.计算机存储单元与存储结构分析  2.算法与数据结构的关系  3.基础存储单元与连续存储单元  4.ArrayList与LinkedList结构分析  5.HashMap底层存储原理详解  6.Hash算法详解与Hash... 查看详情

android-从本质层面了解数据结构与算法

从本质层面了解数据结构与算法技术点  1.计算机存储单元与存储结构分析  2.算法与数据结构的关系  3.基础存储单元与连续存储单元  4.ArrayList与LinkedList结构分析  5.HashMap底层存储原理详解  6.Hash算法详解与Hash... 查看详情

201723272018-2019-1《程序设计与数据结构》实验三:查找与排序

201723272018-2019-1《程序设计与数据结构》实验三:查找与排序课程:《Java软件结构与数据结构》班级:201723姓名:马瑞蕃学号:20172327实验教师:王志强实验日期:2018年11月19日必修/选修:必修一、实验内容:实验二查找与排序-1... 查看详情

20172328《程序设计与数据结构》实验三:查找与排序

20172328《程序设计与数据结构》实验三:查找与排序课程:《软件结构与数据结构》班级:1723姓名:李馨雨学号:20172328实验教师:王志强老师实验日期:2018年11月19日-2018年11月25日必修选修:必修一、实验要求内容实验1:定义... 查看详情

转载数据结构与算法设计

原文:数据结构与算法设计 查看详情

数据结构与算法(java版)|数据结构与算法的重要性

...介绍的几个经典的算法面试题,相信大家现在应该对数据结构与算法有了一个很浓烈的学习兴趣,嘻嘻🤭,数据结构与算法学起来还是非常有意思的,不骗你!激起大家的学习热情之后,接下来,... 查看详情

数据结构与算法的思考与历程(代码片段)

目录概述学习数据结构的初衷什么是算法数据结构的分类从逻辑角度分类从存储结构分类(又称物理结构)线性表线性表基本框架链表与数组的区别链表栈与队列栈与队列基本框架栈队列串二叉树二叉树基本框架二叉树... 查看详情

20172308实验三《程序设计与数据结构》查找与排序实验报告(代码片段)

...3082018-2019-1实验3《查找与排序》报告课程:《程序设计与数据结构》班级:1723姓名:周亚杰学号:20172308实验教师:王志强实验日期:2018年10月20日必修/选修:必修1.实验内容查找与排序-1:定义一个Searching和Sorting类,并在类中... 查看详情

python数据结构与算法之排序(冒泡,选择,插入)(代码片段)

目录数据结构与算法之排序(冒泡,选择,插入)为什么学习数据结构与算法:数据结构与算法:算法:数据结构冒泡排序法选择排序法插入排序法数据结构与算法之排序(冒泡,选择,插入)为什么学习数据结构与算法:计算机重要的几门课:1.... 查看详情

主数据与参考数据的定义与相互联系

这是一篇有关数据管理方面的读书笔记,通过阅读DAMA数据管理知识体系,学习了我们在信息系统建设和系统数据整合过程中用到主数据和参考数据的相互关系,明确了两者的定义与异同点,使得我们了解到主数据... 查看详情

数据类型与数据结构

】数据类型与数据结构【英文标题】:DatatypesvsDatastructures[closed]【发布时间】:2021-05-0812:13:47【问题描述】:C语言中的struct是数据类型还是数据结构?根据***,数组是一种复合数据类型,但数组不是数据结构吗?数据结构与数... 查看详情

数据结构与算法-排序与搜索

排序与搜索排序算法(英语:Sortingalgorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。1.冒泡排序冒泡排序(英语:BubbleSort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的... 查看详情

数据结构与算法-27

查看详情