第三次作业

1. 本周学习总结

初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识点组织起来。请使用工具画出本周学习到的知识点及知识点之间的联系。步骤如下:
1.1 写出你认为本周学习中比较重要的知识点关键词。
-import关键词,package声明包;面对对象编程对象(object);构造函数(this);修饰符
1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。

2. 书面作业

1.以面向对象方式改造数据结构作业'有理数'(重点)

注意:属性必须修饰为为private
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。

https://gitee.com/fyxjm/FengYi/commit/4fe32632497668396534b9923555b670af2a7103

1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?

  • 在封装性上:面对对象编程是将所有的数据和方法集中在一个类中;而面对过程编程的封装性不够,方法一般不做封装,数据一般用Struct封装,方法和数据是分离的;
  • 在代码复用上:面向对象编程是使用继承@override的方式复用;面向过程编程只能以简单的函数复用

2. 构造函数与初始化块

2.1 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?

  • 用于初始化对象的属性,如果我们没有指定对象的初始值,则自动使用默认初始化。
  • 修饰符+类名,构造函数的名称和类的名是相同的,有参构造函数和无参构造函数。
    2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
  • 如果在定义一个类时不写构造函数,它有构造函数,编译程序时会自动加入一个无参数,无内容的构造函数;
  • 如果一个类中只有带参数的构造函数,编译程序就不会自动建立一个无参数的默认构造函数。
    2.3 查看String类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
  • String(); 构造一个空字符串对象;String(char[] value); 通过char数组构造字符串对象;String(byte[] bytes); 通过byte数组构造字符串对象。
  • 这三个String类的构造函数的构造新对象(初始化)的方法不一样,比如说用char数组来构造字符串对象,就用这个代码String strc = new String(cArray);,但是用byte数组构造字符串对象用的是String strb = new String(bArray);
    2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
  • 都是用来完成类的初始化工作,在构造函数中赋值可能会创建临时对象,而初始化块则不会,效果等价,过程不等价;初始化块比构造函数先执行
  • 静态初始化块比初始化块先执行

静态初始化块
定义:
static{}
执行优先级高于非静态的初始化块,它会在对象装载到系统的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。
执行优先级:1
非静态初始化块
定义:
{}
执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。
执行优先级:2

3.代码分析:Math类

3.1 使用java.lang.Math类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?

  • Math类是声明为static的,Math类的方法及成员变量都是静态的,可以直接使用类名.方法来直接访问;由于构造函数被声明为私有的,就是说明不能被外部调用,所以不能new出来一个新的对象
    3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
  • 如果构造函数new Math()会发生编译错误,构造的该函数是不可见的。
    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修饰的是引用类型变量,所指的是变量的值(引用)不能被改变,但是变量所指向的对象的值是可以被改变的

6. Java8中的时间日期类:编写函数public static boolean isMondayToFriday()

功能:判断今天如果是周一到周五,返回true,返回false。main函数中调用该函数,如果为true则输出“工作日+姓名学号”,否则输出"休息+姓名学号"。
截图:关键代码。
提示:使用LocalDateTime, DayOfWeek类

7. 封装

7.1 结合PTA(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?

  • 面对对象中封装是将一系列的数据和方法集中在类中;
  • 减少耦合,类的内部结构可以自由修改,可以隐藏信息,实现细节。
    7.2 和封装有关的关键字有哪些?
  • privateprotectedpublic实现封装。

8. 结对编程实践(未完成,0分)

找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。
写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)

  • 郭启鹏
  • 7-2 jmu-Java-03面向对象基础-02-构造函数与初始化块;
  • 我认为结对编程既有有优点也有不足之处,优点就在于降低了出错的概率,提高代码质量,两人合作能有更强的解决问题的能力;但是结对编程也有不足之处,例如时间上面,自己和队友的时间上总有不同,结对编程要找我们两个人都有空的时间,除去上课,我们每个人还都有自己的事情,找一个两个人都有空的时间编程不是很方便,不像自己一个人什么时候有空就可以拿出电脑来编一会。还有就是,每个人都有自己的代码风格,在细节上总是有一些细小的差异,比如“{“的位置,变量的命名等,这些细小的差异使得我们在看对方编程的时候感觉有点别扭,因为习惯了自己的编程格式;现在还处于磨合阶段。

3. 码云及PTA

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 54 54 4 4
3 435 381 6 2

posted on 2017-09-30 12:29  网络1613冯一  阅读(562)  评论(1编辑  收藏  举报

导航