201621123013《Java程序设计》第3周学习报告
1、本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词,如`类、对象、封装`等
答: 关键词:类、对象、封装、构造函数、初始化块、继承、this和final关键字。
1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。
2、书面作业
1、以面向对象的方式改造数据结构作业'有理数'(重点)
注意:属性必须修饰为为private
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?
答:面向对象编程要进行初始化,将类封装起来(包括其属性和方法),解决问题的时候面对就是一类类的问题,直接使用某个类去解决就好了,而面向过程编程就是利用构造函数的思路,不需要将其封装成类,在主函数里面调用我们构造的函数来实现问题的解决(就类似于我们上次预习课件中讨论过的司机踩油门的那个问题)
2. 构造函数与初始化块
2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
答:1、作用:用来初始化对象,分配空间给定义完的对象类型。
2、函数格式特征:函数名与类名要一致;若构造函数没有返回值类型,其也没有返回值。构造函数可以是有参也可是无参构造函数。
2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
答:如果一个类没有写构造函数,系统会自动创建一个无参的构造函数,如果一个类中只有带参的构造函数,系统就不会自动创建无参的默认构造函数(保证其正确性,避免混淆)
2.3 查看`String`类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
答:1、public String(){
this.value=" ".value;
}
这个是无参构造函数
2、public String(char value[]){
this.value=Arrays.copyOf(value,value.length) ;}
这个String构造函数是将字符串分配到字符数组中去。
3、public String(byte bytes[]){
this(bytes,0,bytes.length);}
这个String构造函数就字节数组来创建字符串对象
2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
答:1、相同点:构造函数和初始化块都可以用来对对象的初始化
不同点:构造函数只能对自己创建的对象进行初始化,而初始化块则能对所有对象进行初始化,由此可以看出 --> 初始化块>构造函数(执行顺序)
2、我们通过pta做题可以发现我们用static
来声明静态初始化块,并且它就执行一次,而初始化块和构造函数多次执行,可以得出执行顺序--> 静态初始化块>初始化块
综上说述,执行顺序为:静态初始化块>初始化块>构造函数
3、代码分析:Math类
3.1 使用`java.lang.Math`类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
答:通过查阅,我发现Math类里面的属性和方法是静态的(即使它不是static类),因此我们可以直接通过使用类名+方法名的方法调用其中的方法。
3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
答:1、报错:The constructor Math() is not visible
2、原因:阅读完源代码我们发现Math是用private来声明的,定为私有化,自然就不能被外部所调用,因此系统就产生了错误。
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
答:我个人认为,非static
类或者类内部的方法、属性是非static
时,就得用new
出来才能用,若是static类
的话,就不需要用new
来创建对象使用了。
4、重载Overload
4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
答:1、定义:重载:对于某一个类来说,方法名一样,但是其参数是不同的,返回值类型随意(可同可不同)
构造函数重载:类名和函数名一致(参数不同),某个构造函数可以调用另一个构造函数。
2、区分方法:区分重载函数的方法就是要看方法参数的类型和数目。
4.2 在`java.lang.Math`类中举出1个方法重载的例子?
答:
5、代码阅读: final
final修饰的变量不能改变,为什么如下代码却可正常运行?
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
答:final所修饰的变量是不可更改的,但是引用对象其中的内容是可更改的,所以以上代码可以正常运行的。
6、Java8中的时间日期类:编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,返回true,返回false。main函数中调用该函数,如果为true则输出“工作日+姓名学号”,否则输出"休息+姓名学号"。
截图:关键代码。
提示:使用LocalDateTime, DayOfWeek类
7、封装
7.1 结合PTA(形状),请用自己的话简单总结一下面向对象中`封装`是什么意思?有何好处?
答:1、按照我自己的理解,所谓封装
就是将自己需要的东西压缩装成一个“包”里,java中的封装就是将成员(变量)和方法统一放在一个“包”里。
2、好处:可以提高调用方法的效率,更加便于操作,封装起来可以有利于确保数据的安全性,更加便利(类似于开车踩油门,无需知道原理)
7.2 和封装有关的关键字有哪些?
答:关键字:public(公开的),private
(私有的),default(默认的),protected (保卫的)
8、结对编程实践(未完成,0分)
找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)
1、队友:陈瑀
2、完成题目:7-1jmu-Java-03面向对象基础-01-构造函数与toString
3、基于老师上课的方法(因为实验课有些问题不是很懂),我们自己回到宿舍,重新审视这个题目,我们自己打了一遍,过程中也问了队友一些问题,我们也交流了老师代码的中一些东西,比如in.close这个东西可有可无(之前也没哟出现过),并上网查阅了资料,这次的合作收获还是蛮多的。
3、码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中,可使用最新版的代码统计工具的-history参数,详细用法见项目wiki地址。表格如下所示:
| 1 | 0 | 0 | 0
| -------- | -----: | :----: |
|2 | 0 | 0 |0
| 3 | 235 | 235 |4|