java第三周作业
1. 本周学习总结
2. 书面作业
1.以面向对象方式改造数据结构作业'有理数'(重点)注意:属性必须修饰为为private。
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
https://gitee.com/yellower/201621123045HuangZiYingYouLiShu.git
1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?
答:构造有理数的分子分母的时候java可以直接利用现有的函数进行构造,c语言必须得自己写函数自己建结构体。面向对象编程很多时候都有现成的函数可以使用,不用大费周章一切从0开始。
2. 构造函数与初始化块
2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
答:构造函数是用来创建一个对象的。
函数格式分为两种:
- 有参构造函数格式:public 创造的对象名 ()
- 无参构造函数格式:public 创造的对象名 (具体需要设置的里面的变量)
2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
答:
- 有。系统会为其创建一个无参构造函数。
- 没有。当存在有参构造函数,无参的需要自己写。
2.3 查看String
类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
public int length(){return value.length}
返回字符串的长度public String(char value[]) {this.value = Arrays.copyOf(value, value.length);}
字符串的复制public String() {this.value = new char[0];}
创建一个字符串数组
2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
顺序:静态初始化块、实例初始化块、构造函数
静态变量和静态初始化块都是在类加载到系统时,加载到系统中,静态初始化块只运行一次,实例初始化块和构造函数都是运行两次,也就是说,有一个对象就执行一次实例初始化块和构造函数。
3.代码分析:Math类
3.1 使用java.lang.Math
类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
答:因为Math类的所有执行方法都是静态方法,不过调用的时候还是有产生Math对象的。
3.2 如果new Math()
会产生什么错误?尝试阅读Math类源代码,分析原因。
答:Math源代码中显示Math是private,所以外部调用时会出错。
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
答:原则上面向对象都需要用new,但是静态的一些方法不需要new,比如Math之类的。
4. 重载Overload
4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
- 重载:一个类中有好几种方法,方法名都一样,但是参数不一样,返回的值也可以一样,是类的多态性的一种表现。
- 构造函数重载:构造函数有一样的名字,但是参数的个数或者是类型是不一样的。
- 区分:参数数量、参数类型。
4.2 在java.lang.Math
类中举出1个方法重载的例子?
答:重载abs方法,返回一个数(int、long、float、double)
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(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?
答:封:封闭,装:装成一个整体。
作用:
- 外部对象是无法直接访问对象的内部实现细节
- 被封装的对象可以被外部多个对象访问
7.2 和封装有关的关键字有哪些?
private
:封装的隔离性的体现,将内部设为私有,外部就无法直接访问内部的实现细节;public
:与private相反,public把内部细节公开出去;
8. 结对编程实践(未完成,0分)
找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。
写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)
姓名:翁华辉
完成:7-3
感想:首先,我们两个相对来说都对java没有那么多经验,也是这学期才开始学习,所以抛开之前的学习状况不说,在学习java这边,水平是相近的。实验前我们先一起花十几分钟一起复习了封装相关的知识,然后分配任务,一个写长方形,一个写圆。因为这部分是同时一起写的,而且虽然写的形状不一样,但是代码大多都是类似的,所以遇到问题都一起讨论+百度解决掉,所以这部分的代码完成得蛮高效率的。main函数的部分主要是一些输入和输出的处理,没碰到什么难的问题,最后还是算蛮顺利的完成了这个题目。
照片:
3. 码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中,可使用最新版的代码统计工具的-history参数,详细用法见项目wiki地址。表格如下所示:
周次 | 行数 | 新增行数 | 文件数 | 新增文件数 |
---|---|---|---|---|
1 | 115 | 115 | 17 | 17 |
2 | 421 | 306 | 24 | 7 |
3 | 698 | 277 | 30 | 6 |
只有单周数据,表格是手动整合的。