1.本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
类 对象 封装性 this private 构造函数 package import
1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。
2. 书面作业
1.以面向对象方式改造数据结构作业'有理数'(重点)
注意:属性必须修饰为为private
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
https://gitee.com/hellolv/java201621123078
1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?
面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的。
面向对象编程是将事物对象化,通过对象通信来解决问题。面向对象编程,数据和对数据的操作是绑定在一起的。
2. 构造函数与初始化块
2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
作用:
- 在构造函数过程中能够初始化对象的值
- 能创建对象,给其空间。
构造函数可以是有参数的也可以是无参数,但是在构造函数的过程中名称和类的名必须要一致,苟泽构造函数没有返回类型。
2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
- 如果类不写构造函数,系统会默认给一个无参构造函数。
- 如果定义了一个有参的构造函数,为了保证正确性,系统不会创建无参构造函数。
2.3 查看String
类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
图一:该String构造函数中,参数为char数组,使用java.utils包中的Arrays类复制数组
图二:该String构造函数是令value字符数组引用空字符串。
图三:该String构造函数直接令value字符数组引用original的value字符数组地址,并把其hash值拷贝过来。
2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
3.代码分析:Math类
3.1 使用java.lang.Math
类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
对于java.lang.Math
类都为静态变量与方法,并不需要new出一个Math对象,再调用该对象上相应的方法。
3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
会出现“The constructor Math() is not visible”的错误提示,因为java.lang.Math类的函数在使用时不需要重载。
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
在引用数据类型在定义实例时需要new实例对象,通过new可以调用含参的和不带参的函数,而对于基本数据类型不需要new可以直接定义,静态方法属于类本身,而非类的实例,所以可以用“类名.方法名”直接调用不必创建相应对象就可以使用。
4. 重载Overload
4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
- 同一个类中的2个或2个以上的方法可以一同一个名字,只是它们的参数声明不同即可,在这种情况下,该方法就被称为重载,这个过程称为方法重载。
参考百度知道
- 举个例子
public Student(){
private String name;
private String age;
public Student(){
}
public Student(String name){
this.name = name;
}
public Student(String name,String age){
this.name = name;
this.age = age;
}
//上面三个函数都是Student类的构造函数。第一个是无参的,第二个有一个参数,第三个有两个参数。这就是构造函数的重载
- 区别方法:看方法或函数的参数是否相同。
4.2 在java.lang.Math
类中举出1个方法重载的例子?
通过查看jdk文档中有关于Math类的abs可以看出在Math()函数中abs的方法有很多而且不尽相同,参数不同,调用的方法也不同,所以组中输出的结果也是不同的。
5. 代码阅读: final
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
因为final修饰的时引用类型的变量,变量的值在运行过程中不能不被修改,所以代码依然可以正常运行,此外,NUMBS存储的时数组的首地址。
6. Java8中的时间日期类:编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,返回true,返回false。main函数中调用该函数,如果为true则输出“工作日+姓名学号”,否则输出"休息+姓名学号"。
截图:关键代码。
提示:使用LocalDateTime, DayOfWeek类
7. 封装
7.1 结合PTA(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?
顾名思义,封:封闭,装:装起来,将具体的实现细节装到一个容器中,并封闭起来,防止容器外部直接访问容器内部的实现细节,仅公开暴露指定的访问路径。正如长方形类Rectangle,其中width, length这些属性是私有的,圆形类Circle,属性radius是私有的。
好处:
- 隔离性,对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的。
- 可复用性:
被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象。 - 可读性:
被封装后的对象的名称(如:程序集名,类名,方法名)如果命名恰当,那么就能在不看里面的实现细节的前提下,了解该对象的作用。
7.2 和封装有关的关键字有哪些?
- private 只允许内部进行访问,外部无法访问。
- public 对所有部分都可见,公共所有
- default 默认的、无符号
- protected 保卫的
8. 结对编程实践(未完成,0分)
找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。
写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)
我的搭档是苏志颖同学,我们所完成的是PTA的上面的第四题,在编写代码的过程中让我感受到两个人一起编写效率能够得到很大的提高,在我编写过程中,能够及时发现我的问题,并能够一起讨论,一起解决问题。
3. 码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 280 | 280 | 5 | 5 |
3 | 530 | 250 | 9 | 4 |