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

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

教材学习内容总结

  • 创建子类:

    • 继承就是从现有类派生新类的过程,通过在子类的声明头中写public class 子类名 extends 父类名;来实现。
    • 特别注意:
    • 子类的实例化并不依赖于父类的实例化。
    • 继承具有单向性,父类不能引用子类中声明的变量和方法。
    • 构造方法不会继承。
  • protected修饰符:
    • 父类中的公共方法可以在子类中通过名称访问,若子类想访问其私有方法,那么父类的方法就必须声明为protected可见性,例如protected int a=12;
    • protected可见性提供了允许继承的最大可能的封装性。
  • super引用:
    • 用来调用父类的构造方法。
    • 子类构造方法时,如引用父类的则例如public 子类名(int 父类构造方法名,int 子类构造方法名)
    • 如果不需要这种调用,Java会自动在构造方法的开始处产生一行super()调用,super引用的操作只能在子类中执行,并且必须是第一行执行(子类构造方法的首行)。
  • 多继承:
    • 一些面向对象语言允许子类有多个父类。Java中依赖借口实现这一功能。
  • 重写方法:
    • 在继承中,子类和父类有相同的方法名和签名时,子类方法重写父类方法,子类优先,调用方法的对象决定了哪一个版本的方法将被实际执行(子类不能重写final方法)。例如书上的parked.message(); dates.message();,进行不同的操作,产生不同的结果。
  • 影子变量:
    • 在子类中声明一个与父类同名的变量,该变量称为影子变量。这种声明引起混淆,应避免。
  • Object类:
    • Java中所有的类都由Object类派生,每一个类都继承toString方法和equals方法。
  • 抽象类:
    • 抽象类通常含有(不必一定)未被定义的抽象方法,不能被实例化。
    • 每个抽象方法都必须使用abstract修饰符。
    • 由抽象类派生出的子类必须重写所有父类的抽象方法,否则子类仍然是抽象类。
  • 可见性:
    • 父类的私有可见性成员会存在于子类当中,但是不能通过成员名直接调用,可以通过调用一个能调用私有成员的方法,间接地调用。
  • 继承的限制:
    • 在一个方法声明中使用final修饰符,使得该方法在任何派生类中不能被重写。
    • final修饰符也可以作用于整个类,使得该类不能用于派生新类。

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

  • 问题一:教材中在讲super的引用时,提到如下,而在例9.9中的Advice类却在最后使用了super.message();

    用super引用调用父类构造方法的操作只能在子类中进行,并且必须是在第一行执行。

  • 问题一解答:当时在看到例9.9时,对Advice类没有什么疑惑的地方,感觉很正确,可以理解,但是偶然又看到super部分的概念后,想起了这个例子,便对super要放在第一行产生了疑问,在网上查了一下super放第一行执行的原因之后,发现是我理解错误,我误认为只要用到super,就必须把它放在首行。事实上,之所以super要放在第一行,是为了在初始化当前对象之前,先保证父类对象初始化,在网上也找到了相关的问题,特别注意,这是指调用父类的构造方法时,必须在子类的构造方法首行,对于父类的其他方法则没有此要求,他们可以直接继承。而在例9.9中,并没有调用父类的构造方法,只是一个message方法,所以不需要。通过这个不细心的问题,加深了我对super用法的理解。
  • 问题二:书上课后题SR9.9的b,“子类可以重写父类的构造方法”,错误的原因。
  • 问题二解答:我认为错误的原因是构造方法根本不可以被继承,只能被调用,没有修改的机会。而答案的解释是“构造方法无返回类型,如果试图重写父类的构造方法,将会产生语法错误,因为除了构造方法之外的所有方法必须有返回。”似乎与我的原因没关系...但同时又多了一个理解,鉴于理解的有点模糊,因此又有了第三个问题。
  • 问题三:子类调用父类的构造方法的原理。
  • 问题三解答:参考一个例子:
    class A{
    public A(){} // 1:无参数构造方法。
    public A(String s){} // 2.
    }  
    
    class B extends A{
    public B(String s){
    super(s); // 3.
    }
    }  

    说明:如果没有1处的无参数构造方法,那么3处一定要主动调用父类带参数的构造方法。如果有1处的构造方法,那么3处代码可以不要,因为Java会自动默认调用父类的无参数构造方法。记住一点:在构造子类时,一定会调用到父类的构造方法。 所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的构造。所以说,子类还是不能继承父类的构造方法,但是可以调用。

  • 问题四:为什么子类不能继承父类的构造方法?
  • 问题四解答:关于构造方法,每个类中都有属于自己的构造方法,即使你没有声明,但是java虚拟机也帮你建了一个隐式的构造方法,因此子类也一定会有自己的构造方法,所以没有必要去继承父类的构造方法,同时,父类构造方法用来构建父类的对象,子类的对象需要声明自己的构造对象来创建,所以更不需要继承。
  • 问题五:抽象类到底是一个什么样的存在?
  • 问题五解答:在查阅相关资料后,找到了一个最容易理解的解释。如下,所以说抽象类可看做一个统筹的类,并不能被实例化,所以称作抽象类。参考如何生动的解释为什么java中要用抽象类?

    你定义一个动物类,继承一个狗类一个猫类。你可以new一个狗类的实例,但你不能new一个动物的实例,因为不存在这样一个不属于任何子类的动物类实例。所以,动物类必须是抽象的。

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

  • 错误一:在IDEA中运行代码时,总有红色波浪线提示错误,但目测被标注的地方没有哪里写错了。
  • 错误一解决:这是在开始使用IDEA时遇到的问题,后来发现是少加了一个“}”,在后来的使用中,差不多知道了IDEA的特点,有时候它提示的错误的地方并不一定就是那里出问题了。
  • 问题二:这次在用虚拟机push的时候遇到了两次错误。

  • 问题二解决:第一个错误是因为之前push的时候没有进行完,有残留,所以再次push新的时候,出现两次不同的提交,最后我把那几个删掉之后就可以了。第二个错误在网上查找了类似的问题其中提到的解决办法如下,其实跟之前的push失败一样用git pull origin mastergit push origin master但错误的原因描述不一样。

git由于不经常提交代码所以会出现版本更新的问题
git pull(已经绑定默认远程仓库的情况)
或者:
git pull origin master
这个时候git命令行中分枝状态变成了 master | MERGING,现在:
git add .
git commint -m "merge with remote"
最后git push origin master

  • 问题三:在输出一长段内容时,想使用“\t”来分隔,但错误如图
  • 问题三解决:在IDEA中这样输出就是正确的,助教说可能是虚拟机有问题。在查找解决办法的过程中了解到java里的\t是补全当前字符串长度到8的整数倍,最少1个最多8个空格。补多少要看你\t前字符串长度,比如当前字符串长度10,那么\t后长度是16,也就是补6个空格,如果当前字符串长度12,此时\t后长度是16,补4个空格。对于我的问题,没有找到合适的解决办法,就在虚拟机中把“\t”换成了空格。输出来的效果一样。
  • 问题四:代码如图,希望输出的per为120000/5,即为24000,但输出总是0。

  • 问题四解决:尝试了加括号,但没有用,最后的解决方法是把per去掉,直接在println输出时加上“pages/pictrue”。之后询问了助教,他指出应该定义一个per方法,如图,并在最后的测试类中通过book.pages()来调用该方法才对,原因是在实例化Book对象时,那个对象并没有使用Book类中出构造方法以外的方法,所以需要使用额外添加的方法才可以。

代码托管

上周考试错题总结

  • 错题一:
  • 错题一解决:在Java中,数组是对象。我在做这道题时,首先确定数组是对象,但不知道他是不是原始数据类型。但看到选项D觉得很有道理,就被他成功说服了。实际上,变量是存储整个数组的内存块的引用变量,而数组不是变量。
  • 错题二:
  • 错题二解析:首先是产生了1000个参考变量,每个都是一个BankAccount对象,而在察看了条目的解释后,还是不理解条目是指什么。在这个解释中,应该是指变量吧。参考Java流里的条目名称是什么?emmmmm...无法理解。
  • 错题三:
  • 错题三解析:第一个中a、b都是数组,我觉得可以理解为String a,b这类的吧。但是在数组的声明中int a[ ]与int [ ] a是等价的呀。而我当时选是因为觉得最正确的写法是a的,所以选了一个,现在看解释还是不理解,那就这样先记住吧,没有为什么。
  • 错题四:
  • 错题四解析:“=”是一个赋值运算符,在a=b后,由于ab都是数组,就产生了一个别名,如果其中一个是确定的数,就把他赋值给另一个。
  • 错题五:
  • 错题五解析:我在做这道题时,认为不必提供参数是以为在测试代码中不需要确定参数,而实际上主方法需要参数,以防程序员希望允许用户提供命令行参数。在java命令之后,在命令行输入的任何内容都将被接受为命令行参数。
  • 错题六:
  • 错题六解析:这道题审题不仔细,没有看到是“cannot”,以为他说的是“can”...
  • 错题七:
  • 错题七解析:做题的时候忘记了还有可变长度参数列表这种东西,可变长度参数列表通过使用省略号(…)用于指定可变的长度。
  • 错题八:
  • 错题八解析:当对ArrayList的前部分进行插入或删除时,就会发生大量的元素复制,从而降低其效率。这里插入或删除时,并不仅仅改变一个元素,后面的都要改变,这一点是要特别注意的。

    结对及互评

    点评:

  • 博客中值得学习的或问题:在代码调试的问题中,详细记录了在编写PP9.3时的过程,还附有UML图,可以说是非常用心了,向优秀大学生低头。
  • 代码中值得学习的或问题:谭鑫对代码有清晰的认识,构思严密,掌握的很好,我所欠缺的就是一个清晰地脑回路。
  • 基于评分标准,我给本博客打分:13分。得分情况如下:
    • 正确使用markdown语法(1分)。
    • 模板要素齐全(1分)。
    • 问题加分(6分)。
    • 代码量(1分)。
    • 排版精美加1分
    • 代码规范加1分
    • 有动手写新代码的加1分
    • 代码Commit Message规范的加1分

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172305
    • 结对学习内容
      • 实验3-5
      • pp9.1和pp9.3

其他

这周主要学习了继承,这就涉及到类的编写,由于我对第七章编写类的掌握不是很全面,所以这周的学习提高了我编写类的能力,对一个类的的认识更加全面,还有就是对这周的实验作业有点一知半解,没有细致的理解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 93/93 1/1 20/20
第二周 305/398 1/2 20/38
第三周 328/651 2/4 25/60
第四周 1013/1689 1/5 30/90
第五周 795/2407 1/6 30/120
第六周 1117/2921 1/7 30/150
第七周 703/3511 1/7 40/190

参考:

原文地址:https://www.cnblogs.com/YiYiYi/p/8909161.html

时间: 2024-11-05 21:59:09

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

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

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

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

20172323 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章--概述 1.1 软件质量 软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科. 解决的问题:控制开发过程,实现高质量的软件 软件工程的目标 高质量软件的特征 1.2 数据结构 数据结构:计算机存储.组织数据的形式. 程序 = 数据结构 + 算法 软件 = 程序 + 软件工程 栈会颠倒数据的顺序,而队列可以保持数据的顺序. 第二章--算法分析 算法

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

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

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的反射(有点复杂,改权限.去修饰符等等.没实

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

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

学号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