20145223《Java程序程序设计》第3周学习总结

时间:2022-07-23 09:25:13

20145223 《Java程序设计》第3周学习总结

教材学习内容总结

第四章内容
1、类与对象
如何定义一个包含有几个值域(Field成员)就是需要我们定义一个类(Class),书上给的例子是这样的:
20145223《Java程序程序设计》第3周学习总结

运行结果:
20145223《Java程序程序设计》第3周学习总结

我自己根据书上所讲的这种定义构造函数(Constructor)的与类名称同名的方法(Method)编译了以下的代码:
20145223《Java程序程序设计》第3周学习总结

以及:
20145223《Java程序程序设计》第3周学习总结

很显然这两种编译的结果是相同的,都是:
20145223《Java程序程序设计》第3周学习总结

2、使用标准类
(1)如果我们想要方便地去接受用户的输入,可以用java.util.Scanner,例如书上p86的代码:
20145223《Java程序程序设计》第3周学习总结

这样一来就可以找Scanner对象要你想要的数据了,上述程序的运行结果如下:
20145223《Java程序程序设计》第3周学习总结

(2)同时由于java语言中存在有浮点数误差,所以我们要想要得到更好的精确度,就需要用到java.math.BigDecimal,按照书上的讲解,我自己编了这样的一个程序来练习:
20145223《Java程序程序设计》第3周学习总结

结果为:
20145223《Java程序程序设计》第3周学习总结

同样的,还可以利用它进行数与数之间的比较:
20145223《Java程序程序设计》第3周学习总结

结果为:
20145223《Java程序程序设计》第3周学习总结

得到的结果和预想中的一样都是正确的

3、对象指定与相等性
“=”是用在指定某个参考名称去参考某个对象,而“==”是用在比较两个参考名称是否参考同一个对象,也就是说在java的语法当中二者有着不同的含义,因此我们在使用的时候应该注意,比如书上的这个例子:
20145223《Java程序程序设计》第3周学习总结

它的运行结果就告诉了我们这两者在使用中的区别:
20145223《Java程序程序设计》第3周学习总结

4、基本类型打包器
(1)Java中有两个类型系统:基本类型和类类型,我们在很多时候需要用到long、Integer这些类(也就是所说的打包器Wrapper)将基本类型打包起来以便于操作。
例如书上的P91例子:
20145223《Java程序程序设计》第3周学习总结

结果为:
20145223《Java程序程序设计》第3周学习总结

从J2SE 5.0后提供了自动装箱功能,编译程序可以自动判断能否进行自动装箱,像是:Integer wrapper=10 (wrapper会参照Integer实例)。同时也可以自动拆箱,取出打包器中的基本形态信息。

5、数组
数组是一种具有索引的数据结构,使用数组会在内存中分配空间存储多个变量,比如:
20145223《Java程序程序设计》第3周学习总结

上面是一个简单的一维数组的例子,如果想要存储一个由坐标轴构成的坐标位置,可以用二维数组,例如课本P97的例子:
20145223《Java程序程序设计》第3周学习总结

显示的结果为:
20145223《Java程序程序设计》第3周学习总结

有一点需要注意的是,如果你想要复制数组,不能简单用int【】 scores2=scores1的“=”这个符号,因为它仅代表将scores1的参考对象也给scores2作为参考,正确的方法应该是新建另外一个数组:
20145223《Java程序程序设计》第3周学习总结

6、字符串
在java中字符串是java.lang.String实例,用来打包字符数组。书上P109页的例子可以让用户命令行自变量提供整数,并计算整数平均值:
20145223《Java程序程序设计》第3周学习总结

字符串本质是打包字符数组的对象,启动JVM并指定执行类时可以同时指定命令行自变量,会收集为String数组,由main()中的args参考。

7、封装
(1)基本概念:在java中用class来定义需要存储的数据有哪些,那么因此导致的多次的对象建立是一个重复的过程,加以改进的方法就是构造函数(constructor):
20145223《Java程序程序设计》第3周学习总结

这就是用了构造函数实现对象初始化流程的封装。
(2)除了使用构造函数之外,还有一种方法是利用数组,比如下面的程序:
20145223《Java程序程序设计》第3周学习总结

(3)public权限修饰
如果想要在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,Java中要使用到就是public加以声明。(声明类为public表示它是个公开类,可以在其他包的类中使用。可以在构造函数上声明public,这表示其他包的类中可以直接调用这个构造函数。可以在方法上声明public,这表明其他包的方法可以直接调用这个方法)
(4)方法重建
在定义类时,可以使用构造函数定义对象建立的初始流程。但视条件不同可以定义多个构造函数,只要参数类型或个数不同,这就成为重建构造函数。以String类为例,其中一个方法为:public static String valueOf(float f)
然而在JDK5之后我们需要注意到自动装箱和拆箱问题:
20145223《Java程序程序设计》第3周学习总结

结果为:
20145223《Java程序程序设计》第3周学习总结

所以如果想要调用某一个指定的方法,我们就需要明确指出。
(5)this的使用方法
在构造函数参数与对象数据成员同名的时候,我们可以使用this加以区分,教材上的案例如下:
20145223《Java程序程序设计》第3周学习总结

20145223《Java程序程序设计》第3周学习总结

这个范例调用了Other(int o)版本的构造函数,而其中使用this()调用了other()版本的构造函数。如果攥写了对象初始区块,对象建立之后会先执行对象初始区块,接着才调用指定的构造函数。

(6)static类成员
被声明为static的成员,不会让个别对象拥有,而是属于类。在JDK5后新增了import static语法,这样我们在使用某一个static类成员的时候,就可以偷懒:
20145223《Java程序程序设计》第3周学习总结

结果如下:
20145223《Java程序程序设计》第3周学习总结

第五章总的来说,封装就是构造函数实现对象初始化流程的封装,把操作对象的流程封装起来隐藏细节,然后就等于把操作对象放进黑箱子进行操作。(在这个过程中,我们还要学习一些语法上需要注意的问题)

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

教材P113举了一个例子代码如下:
String text1 ="Ja"+"va";
String text2 ="Java";
System.out.println(text1==text2);
结果显示的是true,因为“+”链接字符串看似产生了新的字符串,但实际上编译程序会自动认为"Ja"+"va"就是相当于"Java",我觉得这个小细节还挺有趣的。

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

在编写有关使用java.math.BigDecimal的程序时,我遇到了这样的问题,导致我的程序出现了编译错误:
20145223《Java程序程序设计》第3周学习总结

20145223《Java程序程序设计》第3周学习总结

我仔细检查了一遍,发现并没有什么问题……它告诉我“有if,但是没有else”,可是我明明就把else打上去了啊,怎么会没有else?所以我只好求助万能的网络,把出现错误提示的关键字复制下来放到了百度里,结果搜出来发现别人也和我出现了一样的错误。最终我找到了原因,那就是我在if(条件)后面多加了一个分号,去掉分号之后程序就能正常运行了。(编程序真是不能大意啊。)

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

通过对于这两章的学习,我发现它虽然看起来和我们之前所学的C语言的内容完全不一样,是一个新的概念,但实际上是和之前所学的知识是有所联系的。一开始接触的时候很难理解,学的云里雾里的莫不清楚头脑,后来仔细一想就觉得好像能弄懂是什么意思。比如说“封装”这个新词,我一开始不知道它是什么意思,到后来我摸清了它的一个大致思路,就明白它到底使用在哪方面,是解决什么问题的了。还有就是在学习的过程中,我发现了一定要动手实践,比如书上的代码,看起来就是那么回事,可是当你实际要用到这个代码里的方法去处理一些新的东西,你就会开始不知道怎么下手。所以我现在发现了一个很好地学习java的方法,就是在将书上的代码敲到编译程序中后,再自己仿照着编写一些新的拓展的代码。感觉这样学起来会更有效率。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 20篇 200小时
第一周 200/150 1/1 15/12
第二周 180/150 1/1 18/12
第三周 600/400 1/1 17/16

代码托管截图

20145223《Java程序程序设计》第3周学习总结

20145223《Java程序程序设计》第3周学习总结

20145223《Java程序程序设计》第3周学习总结

参考资料