20172314 2017-2018-2 《程序设计与数据结构》第四周学习总结
教材学习内容总结
- 类与对象:类是对象的蓝图,对象的状态由对象的属性值确定,对象的属性由类中所声明的方法定义,对象的行为由对象可执行的操作决定,对象的操作由类中声明的方法定义,对象的操作可能改变该对象的状态。
- 构造方法的类名和方法名相同;toString方法用来获得被输出对象的字符串形式的描述。
- 每个对象都有自己的状态,因为每当创建类的一个实例时,新的内存空间将分配给该变量。
- UML类图代表统一建模语言,对类和对象间的关系进行可视化描述。
-
可见性修饰符
public private 变量 违反封装性 强化封装性 方法 为客户提供服务 为类中其他方法提供支持 - 访问器方法:getX; 修改器方法:setX。
- 静态变量由所有实例共享,可以通过类名称来调用。
- 类之间的关系分为依赖、聚合和继承,依赖关系指一个类需要调用另一个类或者一个类的的对象与本类其他对象的交互;聚合关系是依赖关系的特殊类型,类A被类B定义为类B的一部分时,类B就是聚合类。
- 代码分为伪代码,产品代码和测试代码。
-
this引用特指对象的实例变量,赋值语句右边的变量是构造方法的形参变量,这种方法避免了对含义相同的变量要给出不同命名以示区别的问题。
教材学习中的问题和解决过程
- 问题一:静态变量与实例变量的区别
- 问题一解答:静态变量前要加static关键字,而实例变量前不用加;实例变量属于某个对象的属性,而静态变量属于类,故也成类变量;实例对象必须创建某个对象后通过这个对象来使用,而静态变量可以直接使用类名来调用。参考:http://developer.51cto.com/art/201107/275079.htm
- 问题二:不知道return的作用是什么。
- 问题二解答:一个被调用的方法可能返回一个值,该方法计算得到一个值,然后将这个值提供给调用它的方法,return用于指定从方法中返回的值。在有返回值的类型中,return用来返回指定方法的值,在无返回值(void)的类型中用来结束方法的执行。参考:(https://www.cnblogs.com/zhang-qiang/archive/2011/05/17/2048275.html)
- 问题三:实参和形参的区别是什么
问题三解答:实参为调用方法时传递给方法的实际值,形参是方法声明头中的相应变量。
代码调试中的问题和解决过程
-
问题一:代码编译时错误提示找不到符号,如图
-
问题一解答:查找资料发现,这种问题一般是拼写错误导致的,还有可能是因为没有编译完。同时,在查找资料的过程中get新技能:
如果你一定要把不同的类放在不同的文件里编译的时候最好先编译main方法所在的类
还有编译的时候可以同时编译多个类,比如:JAVAC A.java B.java C.java -
问题二:错误提示无法将类应用到给定类型,如图
-
问题二解答:我的错误代码为:
给出的原因是实际参数列表和形式参数列表长度不同。当时请教了蒋子行同学,他给出的问题原因是RollingDice利用ParOfDice类时,方法不对,die1 = new PairOfDice()
与Public PairOfDice()
是对应一致的,之后理解为父类构造器写了带参数的构造器,调用子类构造器的时候子类构造器中没有,虚拟机发现子类的构造器参数列表与父类构造器参数列表不同,就会提示错误。改正之后在父类改为无参的构造器,调用子类构造器的时候,两者具有了相应的属性和方法,便可以正常运行了。改正之后如图: 问题三:在做书上例题PP4.5时,输出布尔值的部分总是null,如图:
-
问题三解答:这就关系到对布尔值的理解方面了,我错误的认为布尔值需要输出true 或者false,但实际上,定义一个布尔值A后,根据设定的判断条件,只会输出true 或者false,不需要额外定义。但是在更正之后还是错误的,如图
然后我发现最后return写错了,因为当时也没有完全理解return的用法,把
return isAntique
改为return judge
就对了。 -
问题四:如下程序运行错误,!与=之间如果有空格就是错误的,连在一起就对了。
改为这样就对了
- 问题四解答:当时感觉空格的影响力不应该有这么大,应该是其他地方有什么问题,同时上网查找资料也没有得到有关“!”和“=”的运行错误,便把他记录下来,后来得知"!="的含义是“不等于”,必须连在一起,是一个符号,所以不可以乱加空格。
问题五:显示错误方法声明无效
[](https://images2018.cnblogs.com/blog/133312问题五解答:当看到声明错误时,总也找不出问题在哪里,感觉语法没有错误,在这个问题上纠结了很久,最后发现是问题类名缺少字符,在编写Account2.java时,部分过程没有加“2”,这也是一个输入错误。
问题六:如图所示错误
问题六解答:“非法表达式的开始”是由于变量名拼写错误;“进行解析时已到达文件结尾”是由于少一个“}”;"不兼容类型"是由于类名不一致。这三个错误尤其是第一个,总也找不出来修改方法,代码有点长,修正起来很费劲,
第N次知道仔细的重要性
代码托管
上周考试错题总结
-
错题一: In Java a variable may contain
a value or a reference分析:变量包括一个值或者引用。变量代表保存数据的内存单元,可为其赋值
-
错题二:What is the function of the dot operator?
It allows one to access the data within an object when given a reference to the object和It allows one to invoke a method within an object when given a reference to the object分析:点可以用来调用方法,也可以在引用对象时获得访问数据的权利。
-
错题三:Which of the following will yield a pseudorandom number in the range [ -5, +5 ) given the following:
Random gen = new Random( );
gen.nextFloat( ) * 10 - 5分析:这道题目错误的原因是没有注意过书上的float nextFloat()方法。把它当做了int nextInt()来做,从而选择错误。
-
错题四: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");
s1 and s2 are both references to different String objects分析:我知道这道题目的做法,但是忽略了中间的空格,错误的认为两者相等。String类无需显式的使用new运算符及调用构造方法来创建对象。
-
错题五:The String class' compareTo method
yields 0 if the two strings are identical分析:这个问题是int compareTo(String str)方法的定义,本字符串按字典顺序等于str对象时返回一个整型值0;先于返回负值,后于返回正值。
-
错题六:The advantages of the DecimalFormat class compared with the NumberFormat class include
precise control over the number of digits to be displayed和control over the presence of a leading zero分析:虽然DecimalFormat比NumberFormat提供了更多的控制,但是通过一个或多个数学方法将截断保留在程序员手中。%符号将出现在显示的末尾而不是开始。
-
错题七: When comparing any primitive type of variable, == should always be used to test to see if two values are equal. false
分析:这适用于int、short、byte、long、char和boolean,而不是double或float变量。如果两个双变量x和y正在被测试,(x == y)只有当它们恰好等于最后一个小数点时才是正确的。相反,比较这两个值是很常见的,但是允许在值上有细微的差别。例如,如果= 0.000001,我们可以通过(x - y <=)来测试x和y,而不是(x == y)来得到一个更好的概念,如果它们足够接近,可以被认为是相等的。
-
错题八:You may use the String replace( ) method to remove characters from a String. false
分析:这个方法仅适用于单个的字符的替换,并不会在字符串中增添或者删减字符。
-
错题九: 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..; false
分析:应该是在后面加一个“ * ”,代表所有的,如 import package.A.*;
其他
这周的代码量相较于之前有所增加,所以在编译运行的时候经常因为拼写错误报错,遇到最多的问题也是因为这个,纠正的时候也挺麻烦的。同时感觉这两章的内容还没有学好从测验中也能看出来我还会继续学习,做一些课后练习,不能就这么过去了,这样在之后的学习中也会受到影响。但这周较之之前代码量有所提高,以后会继续提升的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 93/93 | 1/1 | 20/20 |
第二周 | 305/398 | 1/1 | 20/38 |
第三周 | 328/651 | 1/1 | 25/38 |
第四周 | 1013/1689 | 2/2 | 30/90 |