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


    教材学习内容总结

    4.8.1迭代器和for循环

    1. 迭代器

    • 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口Iterator接口接受(多态)
    • 使用Iterator接口中的方法hasNext()判断还没有没有下一个元素
    • 使用Iterator接口中的方法next()取出集合中的下一个元素

    2. for循环的使用
    用来遍历集合和数组

    for (集合/数组的数据类型 变量名 : 集合名/数组名){
      System.out.println(变量名);
    }
    

    编写类

    1. 类与对象

    • 类是对象的蓝图。
    • 每个类包括为该类的对象定义的属性和操作。
      • 对象的状态由与对象相关的属性定义。
      • 对象的行为由与对象相关的操作定义。
    • 类的数据和方法都称为类的成员。

    2. UML类图

    3. 静态类
    4. 方法重载:两个或多个方法具有相同的名字。
    5. 测试:测试的目的是发现错误,通过发现错误并修改它们来改进程序的质量。

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

    • 问题1:迭代器和for循环对比
    • 问题1解决方案
      效率上各有各的优势:
    1. ArrayList对随机访问比较快,而for循环中使用的get()方法,采用的即是随机访问的方法,因此在ArrayList里for循环快。
    2. LinkedList则是顺序访问比较快,Iterator中的next()方法采用的是顺序访问方法,因此在LinkedList里使用Iterator较快。
    3. 主要依据集合的数据结构不同判断。
    • 问题2static关键字会改变类中成员的访问权限吗?
    • 问题2解决方案:Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有privatepublicprotected(包括包访问权限)这几个关键字。
    • 问题3:能通过this访问静态成员变量吗?
    • 问题3解决方案:举个栗子
    public class Main {  
        static int value = 33;
     
        public static void main(String[] args) throws Exception{
            new Main().printValue();
        }
     
        private void printValue(){
            int value = 3;
            System.out.println(this.value);
        }
    }
    

    this代表当前对象,那么通过new Main()来调用printValue的话,当前对象就是通过new Main()生成的对象。而static变量是被对象所享有的,因此在printValue中的this.value的值毫无疑问是33。在printValue方法内部的value是局部变量,根本不可能与this关联,所以输出结果是33。
    静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。

    • 问题4:如何理解“接口”,借口存在的必要意义?
    • 问题4解答方案:接口是一组常量和抽象方法的集合(抽象方法是指没有实现的方法,即没有代码体,接口中没有实现的方法,参数列表的方法声明头后面仅跟着分号)。接口不能被实例化,类通过实现定义在接口中的每个抽象方法来实现这个接口,实现接口的类需在类声明头部使用保留字implements,再给出接口名,类中必须实现至少一个接口中的抽象方法,同时也可以定义其他方法。多个类可以实现同一个接口,一个类也可以实现多个接口。实现一个接口的类时,在接口中可以定义额外的方法。示例为一个简单的接口:
    public interface Nameable
    {
         public static setName(String Name);
         public String getName();
    }
    

    “接口是个规范”,这句没错。“不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个接口就一个类去实现呢?如果多个类去实现同一个接口,程序怎么知道他们是有关联的呢?既然不是一个类去实现,那就是有很多地方有用到,大家需要统一标准。甚至有的编程语言(Object-C)已经不把接口叫 interface,直接叫 protocol。统一标准的目的,是大家都知道这个是做什么的,但是具体不用知道具体怎么做。比如说:我知道 Comparable 这个接口是用来比较两个对象的,那么如何去比较呢?数字有数字的比较方法,字符串有字符串的比较方法,学生(自己定义的类)也有自己的比较方法。然后,在另外一个负责对象排序(不一定是数字喔)的代码里面,肯定需要将两个对象比较。这两个对象是什么类型呢?Object a,b?肯定不行,a > b 这样的语法无法通过编译。int a,b?也不行?一开始就说了,不一定是数字。....所以,Comparable 就来了。他告诉编译器,a b 两个对象都满足 Comparable 接口,也就是他们是可以进行比较的。具体怎么比较,这段程序不需要知道。所以,他需要一些具体的实现,Comparable 接口有一个方法,叫 compareTo。那么这个方法就是用来取代 <、> 这样的运算符。因为运算符是编译器保留给内置类型(整数、浮点数)进行比较用的,而不是一个广义的比较运算。如果你可以明白 JDK 自身库里面诸如 Comparable 这样已经有的接口,那么就很容易理解自己在开发程序的时候为什么需要用到接口了。

    四点关于JAVA中接口存在的意义(提高方法步骤灵活性)
    1、重要性:abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力;
    2、简单、规范性:接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白) ;
    3、维护、拓展性;
    4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。

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

    • 问题1:IDEA遇到git上传问题

    • 问题1解决方案:当前目录并非远程仓库的本地目录,所以惨遭拒绝。
    • 问题2:MyDoc.java运行后出现乱码

    • 问题2解决方案:设置右下角File Encoding为GBK即可解决。
    • 问题3:int 32768转换为short是-32768?
    • 问题3解决方案:32768=(1000 0000 0000 0000)2转换成short,则最高位的1变成符号位,于是是负数,所以是补码表示的,取反+1转换为十进制:0111 1111 1111 1111 + 1 = 1000 0000 0000 0000=(32768)10。加上负号:-32768

    代码托管

    上周考试错题总结

    1. Say you write a program that makes use of the Random class, but you fail to include an import statement for java.util.Random (or java.util.*). What will happen when you attempt to compile and run your program.
      A .The program won't run, but it will compile with a warning about the missing class.
      B .The program won't compile-you'll receive a syntax error about the missing class.
      C .The program will compile, but you'll receive a warning about the missing class.
      D .The program will encounter a runtime error when it attempts to access any member of the Random class
      E .none of the above
      正确答案: B 我的答案: A
      解析:The missing class means that there will be undefined variables and/or methods. The compiler will detect these and will issue error messages. Your program won't be executable.(缺少的类意味着将有未定义的变量或方法。编译器将检测这些并发出错误消息。你的程序将无法执行。)
    2. Consider the following enumeration
      enum Speed { FAST, MEDIUM, SLOW };
      A .The ordinal value of MEDIUM is 2
      B .The ordinal value of SLOW is 1
      C .The name of the Speed enumeration whose ordinal value is zero is FAST
      D .The name of the Speed enumeration whose ordinal value is one is SLOW
      E .None of the above
      正确答案: C 我的答案: A
      解析 :Enumerations have ordinal values beginning at zero, in left-to-right ascending order. So, Speed.FAST.ordinal( ) is zero, Speed.MEDIUM.ordinal( ) is one, and Speed.SLOW.ordinal( ) is two.(枚举的序数值从零开始,按从左到右的升序排列。所以,speed.fast.ordinal()为0,speed.medium.ordinal()为1,speed.slow.ordinal()为2。)
    3. If you need to import not only the top-level of a package, but all its secondary levels as well, you should write: import package.*.*;
      A .true
      B .false
      正确答案: B 我的答案: A
      解析: import语句只能与单个*(通配符)一起使用。如果还需要导入包的所有二级,则必须显式写出它们:
      import package.A.*;
      import package.B.*;
    4. An example of passing message to a String where the message has a String parameter would occur in which of the following messages?
      A .length
      B .substring
      C .equals
      D .toUpperCase
      E .none of the above, it is not possible to pass a String as a parameter in a message to a String
      正确答案: C 我的答案: B
      解析: length和touppercase消息没有参数,substring有两个int参数。对于equals,必须将字符串作为参数传递,以便将接收消息的字符串与作为参数传递的字符串进行比较。
    5. In a UML diagram for a class
      A .classes are represented as rectangles
      B .there may be a section containing the name of the class
      C .there may be a section containing the attributes (data) of the class
      D .there may be a section containing the methods of the class
      E .all of the above
      正确答案: E 我的答案: A
      解析: Those four attributes correctly describe a UML representation of a class.

    结对及互评

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 10000行 30篇 400小时
    第一周 254/254 2/2 21/21 开始编写简单的程序
    第二周 132/386 1/3 26/47 学会使用Scanner类
    第三周 632/1018 2/5 21/68 学会使用部分常用类
    第四周 663/1681 2/7 27/95 junit测试和编写类
    • 计划学习时间:20小时

    • 实际学习时间:27小时

    参考资料

    深入理解迭代器
    static理解

  • 相关阅读:
    MVC与MVVM
    js正则删除字符串中的部分内容(支持变量和特殊符号)
    小程序之rpx适配方案
    表单元素内容禁用拼写检查
    vue组件实例的生命周期
    Windows下生成目录结构树命令
    DRF之解析器源码解析
    restful规范快速记忆
    python报错之OSError
    xlrd、xlwt
  • 原文地址:https://www.cnblogs.com/zdyyy/p/11614162.html
Copyright © 2020-2023  润新知