学号20172313 2017-2018-2 《程序设计与数据结构》第四周学习总结
教材学习内容总结
- 对类和对象的定义理解进一步加深。
- 学习如何编写一个类。
- 学习包括静态变量、静态方法在内的静态类成员。
- 学习软件系统中的类之间的各种各样的关系。
- 学习接口的定义以及使用和实现。
- 对第三章所提到的枚举类型进行了进一步的学习。
- 对方法设计进行了初步的学习。
- 对方法重载进行了初步的学习。
- 对软件开发中的测试进行了初步的学习。
教材学习中的问题和解决过程
- 问题1:在看教材示例的时候,好奇为什么不需要用import来声明自己所编写的类。
- 问题1解决方案:上网搜索了后了解到应该是只要在一个包下就不需要声明。我自己也尝试了一下把它们分开放在不同的目录下。事实证明确实是不行的
- 问题2:不清楚普通方法和构造方法的区别
- 问题2解决方案:查阅资料后得知
1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点- 构造方法是创建对象时自动调用的,普通方法需要对象去调用,只要创建对象就一定会调用构造方法,可以显式的指定某个构造方法,如果不指定就调用默认的
- 问题3:不清楚实例变量和静态变量的区别
- 问题3解决方案:经查阅资料后,总结如下
静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量 都是共享同一块内存空间。
实例变量也叫对象变量,这种变量没有加static修饰符。只能通过对象调用, 而且所有对象的同一个实例变量是共享不同的内存空间的。
区别在于:
静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;
实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。
代码调试中的问题和解决过程
- 问题1:做习题4-5的时候在进行编译的时候提示无法转化为boolean,我以为是我没有把"life"定义成字符串,我进行了更改之后依旧无法进行编译。
- 问题1解决方案:我无论怎么对变量更改都无法正确编译,我想我可能是在语法上出了,于是我对第七单元的关于boolean方法的写法并进行了参考,写出了正确的代码。
- 问题2:在编写习题4_9的时候,在编写类的时候因为想要同时return回两个值,但怎么尝试都无法成功。在向老师请教之后知道是无法return回两个值的,可以通过编写两个方法来进行实现。于是我对代码进行了重新修改。代码虽然可以通过编译,但运行的时候始终输出的都是字符串,得不到想要的结果。
- 问题2解决方案:在编写代码的时候误把faceValue1,faceValue2两个整型变量误定义成字符串的形式,我原本想的是定义成字符串,输出的时候同样以字符串的形式进行输出,但事实证明是不行的,系统自动把faceValue1,faceValue2当作字符串进行输出了,所以也就得不到正确的结果了。
- 问题3:在编写习题7_4的时候提示找不到符号,我检查了一遍是由于我形式参数中所调用的方法与我所写的方法不一致所造成的,我更改了之后又发现了新的错误。compareTo中的int与double不兼容,是我错误的把compareTo定义成double型得了。我又一次修改,也ok,我兴致勃勃的准备运行的时候,结果又发现了错误(???),提示我没有覆盖comparable中的compareTo的方法(╯‵□′)╯︵┻━┻。
- 问题3解决方案:在上网搜索了之后找到了一个与我很相似的情况。
Comparable 接口 需要实现这个方法 compareTo - 解决方法一,将o参数类型写成Object,同时注意传入非Name的处理逻辑。解决方法二,标识Comparable接口只传入Name类型
- 实现接口需要实现一样的方法,从返回值、方法名、参数个数和对应参数类型我的参数类型和接口参数类型不一致所以我的方法不是实现了接口方法,所以编译器提示错误我按照他所说的进行了修改,编译果然通过了(^▽^)。
- 问题4:然而我并没有开心多久,因为我又发现我无论怎么更改驱动方法中的数值,最后都是只能输出0 (╯‵□′)╯︵┻━┻,我是真真的快要崩溃了,但代码还是要敲,博客还是要写,只得又要重新检查代码。
- 问题4解决方案:经过一遍又一遍的检查,我发现,因为输出的时候是要double型变量,而numerator和denomination都是作为int型变量,如果先进行运算在进行强制转换就会导致数值上的偏差,我在每个数值后面都乘上了一个1.0以代表是double型变量。总算是能够成功编译和运行了。
代码托管
上周考试错题总结
- 错题1:If two variables contain aliases of the same object then
A . the object may be modified using either alias
B . the object cannot be modified unless there‘s but a single reference to it
C . a third alias is created if/when the object is modified
D . the object will become an "orphan" if both variables are set to null
E . answers A and D are correct - 解析:根据定义,别名提供了一种可以修改对象的方法(别名就像一个指针)。 根据定义,别名提供了一种可以修改对象的方法(别名就像一个指针)。 如果两个变量都设置为null,那么该对象不会被任何变量引用(通过任何别名),它的确会成为“孤儿”,并且将在未来的某个时刻被垃圾收集。
- 错题2: Which properties are true of String objects?
A . Their lengths never change
B . The shortest string has zero length
C . Individual characters within a String may be changed using the replace method
D . The index of the first character in a string is one
E . Only A and B are true - 解析:字符串是不可变的。 这意味着一旦创建了一个字符串对象,它就不能被改变。 因此,字符串的长度一旦创建就不会改变。 最短的字符串是“”在引号之间没有字符,所以长度为零。 替换方法允许您从原始字符串创建一个新字符串,替换一些字符。 字符串中第一个位置的索引不为零。 另外,每个字符串的最后一个字节包含字符串尾字符,它是一个低值字节或二进制零。
- 错题3: What happens if you attempt to use a variable before it has been initialized?
A . A syntax error may be generated by the compiler
B . A runtime error may occur during execution
C . A "garbage" or "uninitialized" value will be used in the computation
D . A value of zero is used if a variable has not been initialized
E . Answers A and B are correct - 解析:很多时候,编译器能够检测到尝试使用未初始化的变量,在这种情况下它会产生语法错误。 如果诸如使用编译器的转义检测,则在使用时发生运行时错误。 Java是一种非常“安全”的语言,因此如果在计算中使用未初始化的变量,它不允许使用“垃圾”或零。
- 错题4: What is the function of the dot operator?
A . It serves to separate the integer portion from the fractional portion of a floating point number
B . It allows one to access the data within an object when given a reference to the object
C . It allows one to invoke a method within an object when given a reference to the object
D . It is used to terminate commands (much as a period terminates a sentence in English)
E . Both B and C are correct - 解析:点运算符直接附加在对象引用之后,接着是需要访问的数据或方法。 在数据的情况下,访问可以用于读取或写入。 在方法的情况下,访问权限是允许调用方法。 浮点数中的点是小数点,而不是点运算符。
- 错题5: Consider the following two lines of code. What can you say about s1 and s2?
String s1 = "testing" + "123";
String s2 = new String("testing 123");
A . s1 and s2 are both references to the same String object
B . the line declaring s2 is legal Java; the line declaring s1 will produce a syntax error
C . s1 and s2 are both references to different String objects
D . s1 and s2 will compare "equal"
E . none of the above - 解析:这两个声明都是合法的Java。 s1是一个String引用,它被初始化为String“testing123”。 s2是一个String引用,它被初始化为字符串“testing 123”。 请注意“测试”和“123”之间的距离。 所以这两个字符串是不相等的。
- 错题6: Java.text‘s NumberFormat class includes methods that
A . allow you to format currency
B . allow you to format percentages
C . round their display during the formatting process
D . truncate their display during the formatting process
E . A, B, C, but not D - 解析:NumberFormat总是循环; 它从不截断。 而且,它确实提供了货币和百分比的方法。
- 错题7: The advantages of the DecimalFormat class compared with the NumberFormat class include
A . precise control over the number of digits to be displayed
B . control over the presence of a leading zero
C . the ability to truncate values rather than to round them
D . the ability to display a % automatically at the beginning of the display
E . only A and B - 解析:虽然DecimalFormat的确提供了比NumberFormat更多的控制,但截断仍然通过一个或多个Math方法掌握在程序员手中。 %符号将出现在显示的末尾而不是开头。
- 错题8: 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 - 解析:枚举具有从零开始的序数值,按照从左到右的升序排列。 所以,Speed.FAST.ordinal()是零,Speed.MEDIUM.ordinal()是一个,Speed.SLOW.ordinal()是两个。
- 错题9: When comparing any primitive type of variable, == should always be used to test to see if two values are equal.
A . true
B . false - 解析:int,short,byte,long,char和boolean都是如此,但不是double或float变量。 如果正在测试两个双变量x和y,则(x == y)只有在它们完全等于最后一个小数点时才为真。 通常是比较这两个值,但允许值有小的差异。 例如,如果THETA = 0.000001,我们可以通过(x-y <= THETA)而不是(x == y)来检验x和y,以更好地了解它们是否足够接近以被认为是相等的。
其他
这周相比于上周又是一次难度的提升,让我感触最深的还是在我所犯的错误上,除去我上面写的之外,还有数不胜数的编写代码时由于粗心所犯下的错误,在以后的学习中要好好注意并且订正。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 126 | 1/1 | 20/20 | |
第二周 | 388/466 | 1/2 | 15/35 | |
第三周 | 706/1162 | 1/3 | 17/52 | |
第四周 | 1104/2266 | 1/4 | 20/72 |
- 计划学习时间:20小时
- 实际学习时间:20小时