1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词,如类、对象、封装等
类 封装 继承 多态 抽象类 重写 和重载
1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。
因为面板大小,图片尺寸问题,导致图片看起来有点模糊。有时间再整体修改设计一下。水平暂时有限,只能够弄个简单的概括性的思维导图了
传送门
2. 书面作业
以面向对象方式改造数据结构作业'有理数'(重点)
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?
面向过程的就是以一件要解决的事情为中心,然后分析解决问题的步骤,利用函数等来实现。
面向对象是以对象
为中心
2. 构造函数与初始化块
2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
- 对象初始化。
- 创建对象。想要创建对象必须要有构造函数。没有声明会使用默认的
初始化一个对象时会被执行函数名和类同名但是没有返回类型
2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
会的,会创建以一个无参构造函数。有了一个带参的话就不会创建不带参构造函数
2.3 查看String类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
该构造方法会创建空的字符序列,注意这个构造方法的使用,因为字符串对象是不可变的。
public String(){
this.value = "".value;
}
直接将源 String 中的 value 和 hash属性直接赋给目标 String。String 的值会影响到目标 String 的值。
public String(String original){
this.value = original.value;
this.hash = original.hash;
}
当通过char数组构建时,将char数组复制到value中去
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
相同的是构造函数和初始化块都可以对对象初始化,不同的是构造函数只能初始化相应的对象,而初始化块却是可以初始化所有对象。还有一个的就是初始化块不接受参数,但构造函数可以接受有参和无参
静态初始化块多了static
,且静态初始化块只执行一次。
静态初始化块先执行
3.代码分析:Math类
3.1 使用java.lang.Math类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
public final class Math extends Object,没有static修饰,所以Math不是静态类,但是里面的方法是静态的,所以可以直接用类名.方法名来调用
3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
The constructor Math() is not visible
math 被private修饰,所以不能被外部所调用
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
当我们需要调用这个对象里面的非静态方法或属性时,需要new出来,调用静态方法的时候可以不用创建对象
4. 重载Overload
4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
重载:在类中同名不同参
构造函数重载:就是在一个类当中,可以定义多个同名的方法,他们中的参数类型或参数个数或者是顺序不同,当我们给这个类创建对象时,就有了多种不同的创建方式
区分方式:参数个数以及类型或者参数的顺序来判断
4.2 在java.lang.Math类中举出1个方法重载的例子?
5. 代码阅读: final
final修饰的变量不能改变,为什么如下代码却可正常运行?
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
final修饰的变量不能改变,final修饰的数组的地址不能改变,但地址中的数值可以改变。这没有改变引用变量的地址
6. Java8中的时间日期类:编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,返回true,返回false。main函数中调用该函数,如果为true则输出“工作日+姓名学号”,否则输出"休息+姓名学号"。
截图:关键代码。
提示:使用LocalDateTime, DayOfWeek类
7. 封装
7.1 结合PTA(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?
在pta中,我们用private来修饰width,length,radius这些属性来达到封装的目的。这样在了类的外部我们就不能操作这些数据了
可以彻底的隐藏类中方法的内部实现,操作简单,提高对象数据的安全性
7.2 和封装有关的关键字有哪些?
private default protected public
8. 结对编程实践
找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。
写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)
一、
- 对方姓名:陈芳毅
- 完成的题目:jmu-Java-03面向对象基础-02-构造函数与初始化块.
- 我们一个查找资料,一个敲代码,感觉还是很有意思的。
二、
- 对方姓名:张晨曦
- 完成题目:有理数
- 俩个人分工合作,速度快,效率高
3.github及PTA
3.1. github代码提交记录
在github的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中,可使用最新版的代码统计工具的-history参数,详细用法见项目wiki地址。表格如下所示:
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 484 | 484 | 3 | 3 |