《Java课程》第三周学习总结
1. 本周学习总结
1.1写出你认为本周学习中比较重要的知识点关键词。
- 继承,多态,封装。
- 类,对象,方法。
- new关键字,private关键字,public关键字,以及默认的(default)关键字之间。
1.2思维导图

2.书面作业
1.以面向对象方式改造数据结构作业'有理数'(重点)
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
- 类的代码
![]()
- Add函数
![]()
- Main函数
![]()
- Gcd函数(取最大公约数)
![]()
(git地址)[https://gitee.com/WenMangSu/Week03/blob/master/有理数.java]
1.2 对比你的代码与例程的代码,说明面向对象编程与面向过程编程有何区别?
- 面向对象编程中,属性需要封装;在面向过程编程中,运用的是
struct数据库来构造一个数据库,之后再编写相应的函数,其中参数为struct的变量。 - 在面向对象编程中,运用的是
class来新建一个类,然后再在类中编写方法,通过new关键字实例化对象之后new Rational().add(r1,r2)来调用类中的方法。
2.构造函数与初始化块
2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
- 第一问:Person类的构造有参函数
Person(String name, int age, boolean gender)可以用来给对象进行private属性的初始化。 - 第二问:函数格式特征,没有返回值的类型、不同构造方法的括号中的参数个数以及类型可以不同。
2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
- 第一问:有,在编译之后系统内部会默认生成一个无参构造函数。
- 第二问:没有,如果已经有一个带参的构造函数,就不会生成默认的无参构造了。
2.3查看String类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
1.public String()新建一个空的字符串对象
2.public String(char []value)将字符数组转换为字符串对象
3.public String(byte []bytes)将字节数组转换为字符串对象
2.4结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
-
初始化块与构造函数的异同:
这是初始化块
![]()
这是静态初始化块:是用static关键字声明的代码块
![]()
-
第一问:初始化块会先于构造函数执行。
-
第二问:初始化块在每次调用构造函数时都会执行,静态初始化块只会执行一次,且静态初始化块会在初始化块之前执行。
3.代码分析:Math类
3.1使用java.lang.Math类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
答:因为Math类的方法声明是静态的,占用的是栈内存和堆内存之外的空间,是属于整个类的,不需要再通过new关键字申请堆内存空间来创建一个调用方法的Math对象,可以直接调用该对象上相应的方法。
3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
- 会出现如下的错误。
![]()
- Math源代码分析的原因
![]()
Math类源代码的开头就已经很明确的注释出,本类不能让任何对象实例化此类。
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
- 需要
new出来才能使用的对象:我们需要调用其所在类中的方法时,该对象需要通过new关键字实例化之后才能使用。 - 调用通过
static关键字声明的方法时,可以不需要通过new出对象就可以使用。
4.重载Overload
4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
- 重载就是在已有的方法的基础上,在同一类中创建相同方法名称的方法,称为方法的重载。
- 构造函数的重载就是,相同的构造函数,其导入的参数的个数与类型不同,以此来初始化出不同的对象。
- 可以通过重载方法的返回值类型(虽然不建议更改返回值类型就是了),输入的参数的个数来区分不同的重载方法。
4.2在java.lang.Math类库中举出一个方法重载的例子。
- eg:
![]()
![]()
5. 代码阅读: final
5.1final修饰的变量不能改变,为什么如下代码却可正常运行?final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
- 因为此代码是在编译过程结束之前就已经执行完的,如果是通过调用方法来修改
final定义的数组时,就会出现错误。
6. Java8中的时间日期类:编写函数public static boolean isMondayToFriday()

7.封装
7.1结合PTA(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?
- 在面向对象中,封装是只将用
private声明的属性等限制,只能够在class中,也就是类的内部中调用。
![]()
- 好处:这样对象在调用类中方法的时候就不能直接访问到对象的private属性,不然随意更改private定义的属性很容易出现运行混乱的结果。
7.2 和封装有关的关键字有哪些?
- Answer:
public公共声明,default默认即为default,private私有声明
8. 结对编程实践

- 本次结对编程实践的搭档是同寝室的吕炜彬同学
- 完成题目:我们共同完成了PTA题目列表中的第四题(形状-继承)
- 实验感想:本次结对实验中,对于利用
extends关键字进行子类继承时,试验要求的两个sum计算方法的编写遇到了麻烦,但是搭档同学指出了应当在shape类中定义这两个方法,并且利用类数组来完成题目要求,问题才得以解决我感受到了结对编程的好处,两个人的想法能够快速交流。
3.码云及PTA
3.1码云代码提交记录


3.2 截图PTA题集完成情况图


3.3 统计本周完成的代码量
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 1 | 120 | 120 | 2 | 2 |
| 2 | 280 | 160 | 5 | 3 |
| 3 | 590 | 310 | 10 | 5 |











浙公网安备 33010602011771号