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


    学号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 value
        while(arr2.hasNext()){
        myBook = bookList.next();
        System.out.println(value);}
    

    结对及互评

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

    • 转瞬间书本已经过半了,知识还很散,需要一次总结。
    • 这周的实验介绍了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小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    idea中pom.xml相关操作
    Java集合1-集合与数组的区别
    idea中各种图标的含义
    testng之多线程执行(并发执行)
    testng之DataProvider参数化
    fastjson将java对象与json字符串相互转换
    testng -依赖测试
    testng- 异常测试
    转-selenium3 webdriver启动火狐、chrome、edge、Safari浏览器的方法
    浏览器兼容性测试
  • 原文地址:https://www.cnblogs.com/wbiao21/p/6701319.html
Copyright © 2020-2023  润新知