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

教材学习内容总结

  • 关键概念

    1. 多态引用在不同的时候可以指向不同类型的对象
    2. 多态引用在运行时才将方法调用与它的定义绑定在一起
    3. 引用变量可以指向声明继承于它的任意类的任何对象
    4. 对象的类型,而不是引用的类型,决定调用的是方法的哪个版本
    5. 接口是一组抽象方法,所以不能被实例化
    6. 继承可适用于接口,所以一个接口可派生于另一个接口
    7. 接口引用可以指向实现这个接口的任意类的任何对象
    8. 方法的参数可以是多态的,这样使方法具备了对其参数进行控制的灵活性
    9. 在侦听器和所侦听组件之间建立关系是通过多态完成的
  • 重点总结
    1. 当一个类给出了接口中定义的每个抽象方法的实现是,就称类实现了接口
    2. 如果接口中的某个方法没在类中实现,则编译错误
    3. 接口只保证类实现了某些方法,但它不限制类可以有其他的行为
    4. 多个类可以实现同一个接口,并在类中提供它们各自对方法的定义
    5. 接口中还可以包含常量,这些常量用final修饰符来定义
    6. 子接口继承父接口中的所有抽象方法和常量。实现子接口的任何一个类必须实现所有的方法
    7. 接口中所有成员都是公有的

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

  • 问题1:如何理解书中

    对象的类型,而不是引用的类型,决定调用的是方法的那个版本

  • 解决思路:当一个父类对象的引用变量,它引用子类对象时,决定调用谁的成员方法的条件是:被引用对象的类型而不是引用变量的类型。但是这个被调用的方法必须是在父类中定义过,也就是子类覆盖过的方法。

  • 问题2:关于动态绑定
    1.关于绑定

    绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.

    2.静态(前期)和动态(后期)绑定

    静态:在程序执行前方法已经被绑定,java当中的方法只有final,static,private和构造方法是前期绑定。(个人认为将方法声明为final既是为了方法被覆盖也是为了关闭动态绑定,static,private由于不能被继承所以在编译时就可以确定值)
    动态:在运行时根据具体对象的类型进行绑定。

    3.动态绑定的细节(来自网络)

    1. 编译器检查对象的声明类型和方法名。假设我们调用x.f(args)方法,并且x已经被声明为C类的对象,那么编译器会列举出C类中所有的名称为f的方法和从C类的超类继承过来的f方法
    2. 接下来编译器检查方法调用中提供的参数类型。如果在所有名称为f 的方法中有一个参数类型和调用提供的参数类型最为匹配,那么就调用这个方法,这个过程叫做“重载解析”
    3. 当程序运行并且使用动态绑定调用方法时,虚拟机必须调用同x所指向的对象的实际类型相匹配的方法版本。假设实际类型为D(C的子类),如果D类定义了f(String)那么该方法被调用,否则就在D的超类中搜寻方法f(String),依次类推

    4.我的例子

      public class Testme {public static void main(String[] args){Father people = new Son();people.high();}}class Father{public void high(){System.out.println("170");}}class Son extends Father{public void high(){System.out.println("120");}}

    声明了Father类型变量people但它指向是一个Son的对象,其调用Son的方法,因为在运行时发生了动态绑定,在绑定过程中需要确定调用哪个版本的high方法实现。

  • 问题3:关于接口的继承问题
  • 描述:书中介绍继承的概念出适用于类外,还适用于接口,那么接口继承是否和类继承一般不支持多继承。

    (来自网络)java接口可以多继承。Interface Extends Interface0, Interface1, interface3
    不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?
    但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。

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

  • 问题1:static关键字
  • 描述:在做实验时有如下代码
    public class Mydoc {Document d;public static void main(String[] args) {d = new Document(new IntFactory());d.DisplayData();d = new Document(new FloatFactory());d.DisplayData();}
}

此时程序提示Non-static filed 'd' cannot be referenced from a static context

  • 解决过程:因为静态方法不会对具体的对象进行操作,所以它们不能引用只在类的实例中才存在的实例变量。所有的静态方法,包括main方法,都只能访问静态变量或局部变量。
    所以static Document d

代码托管

  • 代码截图

上周考试错题总结

  • 1.如果有以下的程序代码:
    Int x=100;Int y=100;Integer wx=x;Integer wy=y;System.out.println(x==y);System.out.println(wx==wy);
在JDK5以上的环境编译与执行,则显示的结果是[true,true]
  • 1.分析:不了解Integer类

    Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。
    此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

  • 2.如果有以下的程序代码:
     int[] arr1 = {1, 2, 3};int[] arr2 = new int[arr1.length];arr2 = arr1;for(int value : arr2) {System.out.printf("%d", value);}
以下描述何者正确? [执行时显示:123]
  • 分析;fot-each语句,等价于下列语句
    int valuewhile(arr2.hasNext()){myBook = bookList.next();System.out.println(value);}

结对及互评

  • 本周结对学习情况

    • 20162327
    • 结对学习内容
      • Complex复数类
      • Junit单元测试
      • 删除数组元素
  • 上周博客互评情况
    • 20162322
    • 20162324
    • 20162311
    • 20162308
    • 20162315

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

  • 转瞬间书本已经过半了,知识还很散,需要一次总结。
  • 这周的实验介绍了Junit进行单元测试,但对于编写好的测试代码还有很大很大的不足。
  • 课外的知识汲取很有必要,没事可以多看看别人的博客,交流经验
  • 多看课外书,这周的读书让我感受很多,收获很多

第二次试验Java面向对象程序设计

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第五周 200/1500 2/6 20/20
第六周 200/1700 1/7 18/38
第七周 500/2100 2/9 20/58
第八周 000/0000 0/0 00/00

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表)

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java程序设计与数据结构教程(第二版)》学习指导
  • ...

转载于:https://www.cnblogs.com/wbiao21/p/6701319.html

王彪20162321 2016-2017-2 《程序设计与数据结构》第7周学习总结相关推荐

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

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

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

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

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

    学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...

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

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

  5. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  6. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结

    第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...

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

    学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...

  8. 20162330 2017-2018-1《程序设计与数据结构》第二周学习总结

    2017-2018-1 学习总结目录: 1 2 3 5 6 7 9 10 11 12 目录 0. 本周学习内容总结 0.1 Comparable接口与Comparator接口的使用 0.2 泛型方法设 ...

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

    教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...

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

    教材学习内容总结 概述 软件工程:是一门关于高质量软件开发的技术和理论的学科,用来控制开发过程,实现高质量的软件. 软件工程的目标:正确性.可靠性.健壮性.可用性.可维护性.可重用性.可移植性.运行效 ...

最新文章

  1. 浅谈工程师的调试法宝(5) -JScope的应用_MCU
  2. vue项目按需引入element-ui,修改.babelrc文件之后报错
  3. 【学习笔记1】CentOS 下载
  4. MySQL——单表查询练习:彩票数据核对
  5. AI:2020年WAIC世界人工智能大会2020年7月9日9:30-12:00开幕式《李彦宏、Elon Musk、马云等大佬演讲》
  6. iframe 按比例缩放_不按常理出牌!5个Excel灵异事件,能让你崩溃
  7. ubuntu 创建桌面快捷方式
  8. 用wamper打开php源码_php源码该怎么设置数据库
  9. Elastic Jeff Yoshimura:开源正在开启新一轮的创新 | 人物志
  10. ASP.NET MVC 2.0 AsyncController(转)
  11. java聊天系统异常问题_【图片】写的socket编程实现窗口聊天出现空指针错误 在自己电脑没事【java吧】_百度贴吧...
  12. ios 怎么禁止点击子视图的时候不响应父视图的点击事件
  13. python自动批量发邮件脚本_python自动发送邮件脚本
  14. vue实现关键字查询列表数据
  15. 博途PLC如何通过FB285实现V90 PN的速度控制
  16. 文献综述格式及写作技巧
  17. 解决vue和vue-template-compiler版本不一致问题
  18. 十年一剑,股票自动交易实验(寻找股海宝藏之旅—解锁股市交易更多姿势)
  19. 小米air2se耳机只有一边有声音怎么办_小米耳机只有一边有声音,这问题怎么解决...
  20. Linux 下 JbossEAP 6.2安装与实例部署

热门文章

  1. Java温故而知新(1)集合类
  2. shell脚本判断进程是否运行
  3. 【电信增值业务学习笔记】8 3G视频类增值业务
  4. 常用命令-临时记录!
  5. 奇妙的二叉树:Huffman的贡献
  6. VMware ESX Server 4(vSpere)测试记录
  7. 模组使用之天线阻抗匹配、匹配过程、天线选型注意、RF走线Layout建议
  8. NR 5G RRC连接重建
  9. ThinkCMF 5.1.0 发布:支持 swoole、协议变更为 MIT
  10. Watcher 实现机制之client注冊