20172328李馨雨《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 1.学习使用new运算符建立对象(即实例化),了解null空引用。具体体悟 :类和对象的关系。
- 2.对象引用变量的声明和初始化。用"."来引用方法,并且需要保留()。
- 3.了解String类的一些基本方法和标准类库java API。
- 4.除了在java.lang中的变量无需import声明,其他都需要import声明(简化类的多次引用)。
- 5.了解和使用Random类和Math类。
- 6.理解格式化输出中NumberFormat类和DecimalFormat类和printf方法。
- 7.特殊的枚举型数据类型,枚举型是一种特殊的类,枚举型变量是对象变量。(这点特殊在编译代码时让我发现编译好的class文件名中多了
$变量名
)。
教材学习中的问题和解决过程
- 问题1:什么是空引用?
- 1.(〃‘▽‘〃)本题解答:当时的回答是“一个对象中所有的引用都丢失了”,后来发现自己混淆了别名和空引用两个概念。
先来讲我当时最迷糊的一个概念:对象变量保存的不是数值,而是地址。赋值语句实际上是复制地址。这时就可以来讲讲别名了。
别名:就是两个名称不相同的变量,其所包含引用的地址都是相同的,这是它们两个就成了别名,当一个对象的所有引用都丢失后,就再不能为程序所用,也就是永久丢失。
空引用:
可以将一个对象变量设置为null,null是java的保留字,专门用于表示该变量不指向任何对象。
在Java中,对象往往包含属性、方法及一个存储空间,若一个对象的属性和方法是空的则可认为这是一个空对象。一个空对象也是对象,同样通过对象名引用方法或属性,但和一般对象有点不同。(本篇博客最后有链接,比较详细)
- 问题2:类和包究竟有什么关系?public类具体是修饰什么的,为什么当其存在时文件名与其所修饰的类要相同?
- 2.(〃‘▽‘〃)本题解答:
刚开始真的真的很不理解。去查阅了一下,得如下结果。java包是一个相关类的集合。包相当于模块,类相当于模块下各个功能的实现。包(package)相当于姓名中的“姓”,类(class)相当于“名”。所以在调用某类方法 的时候,不仅需要指明方法所在的“名”,即类,还要指明方法类所在的“姓”,即包。这样编译器才知道你调用的方法是哪一个。
- 问题3:看到Math类方法和 java.math包,但是却不理解为什么在例3.3时不声明math包就直接使用。
-
3.(〃‘▽‘〃)本题解答:最后重新理解发现是:Math类其实在java.lang包中,我试了一下用import声明的,如下图:
删掉import java.math后的;
代码调试中的问题和解决过程
- 问题1:很容易忘记引用方法时后面加()。(忘记截图了)
- 1.(〃‘▽‘〃)本题解答:很多次这样的错误,需要进一步细致理解。
- 问题2:主目录下编写、编译、运行java文件。
- 2.(〃‘▽‘〃)本题解答:在主目录下编写,例:
vim src/第三周/java_homework_week3/pp3_4.java
,在主目录下编译并将class文件放入bin目录。例:javac -d bin/第三周 src/第三周/java_homework_week3
,在主目录下运行java文件。例:java src/第三周/java_homework_week3
。
代码托管
上周考试错题总结
- 问题1: What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我们执行下面的赋值语句,得到的z将会是什么值?)
A . z will equal 0.0 (z将等于0.0)
B . z will equal 0.5 (z将等于0.5)
C . z will equal 5.0 (z将等于5.0)
D . z will equal 0.05 (z将等于0.05)
E . none of the above, a run-time error arises because z is a float and 5 / 10 is an int (以上都不对,因为z是float类型,5 / 10是int类型,所以会发生运行时错误)
- 问题1分析和领悟:这道题没有认真分析,其实很简单。因为5和10是整型变量,所以进行除法运算时就会按照整形变量即int型变量进行计算,然后再进行赋值型提升转换,变成0.0.故选择B.
- 问题2:A cast is required in which of the following situations? (下列哪种情况需要强制转换?)
A . using charAt to take an element of a String and store it in a char (使用charAt来获取字符串元素并将其存储为char类型)
B . storing an int in a float (将一个int类型的数存储为float类型)
C . storing a float in a double (将一个float类型的数存储为double类型)
D . storing a float in an int (将一个float类型的数存储为int类型)
E . all of the above require casts (以上所有情况都需要强制转换)
- 问题2分析和领悟:A答案中charAt执行后其字符就是一个,因此储存为char类型没问题。而B与C答案中都是增大了储存容量,因此也没问题。只有D答案中是由float变为int即大变小,因此需要强制转换。故选择D。
- 问题3:If x is an int and y is a float, all of the following are legal except which assignment statement? (如果x是一个int类型的数,y是一个float类型的数,下面所有赋值语句中哪个不合法?)
A . y = x;
B . x = y;
C . y = (float) x;
D . x = (int) y;
E . all of the above are legal (以上全部合法)
- 问题3分析和领悟: 和第二个错误问题一个原因,归根结底还是自己理解的不够透彻。现在选择很明显,A为提升型转换,C和D为强制型转换。
- 问题4: What is output with the statement System.out.println(""+x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(""+x+y);的输出是什么?)
A . 15
B . 105
C . 10 5
D . x+y
E . An error since neither x nor y is a String (因x和y都不是字符串而引起的一个错误)
- 问题4分析和领悟: 这个题纯属平时不注意而犯的错。完全懂得两个数字不会相加。“+”起到的是连接符的作用。但是选择了C答案!错误就是在+x+y之间是没有空白符的,也就是说输出后两个数值之间没有空格,之前在练习书本上的示例和作业时,一直使用+ x + y;这样出来的两个数字是有空格的。
- 问题5: If you want to store into the String name the value "George Bush", you would do which statement? (如果你想把"George Bush"这个值存储为字符串类型的名字,你会执行那条语句?)
A . String name = "George Bush";
B . String name = new String("George Bush");
C . String name = "George" + " " + "Bush";
D . String name = new String("George" + " " + "Bush");
E . Any of the above would work (上述都可以完成)
- 问题5分析和领悟: 这个错误后来在第三章进行了了解,上述几条其实都可以达到。
- 问题6: Java is a strongly typed language. What is meant by "strongly typed"? (Java是一种强类型语言。“强类型”指的是什么?)
A . Every variable must have an associated type before you can use it (在使用变量之前,每个变量一定都有一个与之关联的类型)
B . Variables can be used without declaring their type (变量可以在不声明其类型的情况下使用)
C . Every variable has a single type associated with it throughout its existence in the program, and the variable can only store values of that type (在程序中,每个变量都有一个与之关联的类型,而变量只能存储该类型的值)
D . Variables are allowed to change type during their existence in the program as long as the value it currently stores is of the type it is currently declared to be (变量存在于程序中时允许改变类型,只要它当前存储的值是当前声明的类型)
E . Variables are allowed to change types during their existence in the program but only if the change is to a narrower type (变量存在于程序中时允许改变类型,但只能缩窄转换)
- 问题6分析和领悟:其实错了这道题后我还是没有理解,看到解析。 The reason that strong typing is important is it guarantees that a program that was successfully compiled will not have run-time errors associated with the misuse of types for the variables declared.我姑且翻译一下:强类型很重要的原因是它不会误用已经声明了的类型的变量,保证了程序正常编译而不会运行出错。(在程序中,每个变量都有一个与之关联的类型,而变量只能存储该类型的值),B答案比较合理。
- 问题7:In Java, ‘a‘ and ‘A‘ are considered to be different values. (在Java中,‘a‘和‘A‘被当成不同的数值)
A . true
B . false
- 问题7分析和领悟: 当时选错是因为认为a和A都是变量的话可以进行赋值,当我赋予相同的数值之后,就是相同的。后来经过仔细查看,原来题目中‘a‘和‘A‘表示的是字符,当其输出时, ‘a‘ and ‘A‘ 有不同的ASCII 码值 和 不同的 Unicode编号。
本周想说(感悟、思考等,可选)
这周学习效率很差劲,甚至可以说基本没有很大的进步,可能是状态不太好。这周的学习内容更加具体丰富,类、对象、包、方法通通上场,刚开始阅读教材时总有一种看完合上书什么都不知道的感觉,这种感觉让人很难受。还有就是要形成一个具体的知识构架很不容易,常常在小知识点上卡壳,往往让我怀疑自己的理解力。还有最深刻的一个道理,不要拉下太多,任务量永远是越攒越多,堆到后面会特别辛苦的赶。从这周开始。java语言的学习已经很明显的深入和具体了,可能需要更多的投入和坚持。好的,说完了,继续加油!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 15/15 | |
第二周 | 377/477 | 1/1 | 20/35 | |
第三周 | 280/757 | 1/1 | 22/57 | 心有点累,不太好学 |
参考资料
3.java程序设计教程(第八版)
原文地址:https://www.cnblogs.com/LXY462283007/p/8630412.html