201621123015《Java程序设计》第3周学习总结

1.本周学习总结

1.1写出你认为本周学习中比较重要的知识点关键词,如类、对象、封装等。

答:类,对象,封装,继承,初始化块,构造函数。关键字(this、static、final)。

1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。

2.书面作业

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

1.1截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
答:截图如下



git

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

答:历程的代码是面向过程的,当我们要解决某个问题时直接调用函数或自己去编写函数实现,其中的原理用户本身是知道的。而面向对象不一样,我们要将类进行封装,里面的属性、方法的具体原理容用户不需要知道,只需要知道怎么使用这个方法。面向对象我们只要建立对象,对象是类的实例,就可以直接调用类中的方法。

2.构造函数与初始化块

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

答:Q1:一是构造函数可以初始化对象的值,二是能创建对象,给其空间。

Q2:构造函数可以是有参数的也可以是无参数,构造函数的名称和类的名必须要一致,构造函数没有返回类型。

2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?

答:如果定义类时,没有撰写任何构造函数,编译程序会自动加入一个无参数,内容为空的构造函数。但是如果一个类中有有参的构造函数,那么编译程序就不会为这个类定义一个无参的构造函数,即没有默认构造函数,因为只有编译程序自动加入的构造函数,才称为默认构造函数,所以即使自己定义一个无参构造函数也不能算得上是默认构造函数。

2.3 查看String类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。

图一

参数为char数组,使用java.utils包中的Arrays类复制数组
图二

从bytes数组中的offset位置开始,将长度为length的字节,以charsetName格式编码,拷贝到value
图三

调用public String(byte bytes[], int offset, int length, String charsetName)构造函数

2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?

答:构造函数与初始化块都可以用于给对象进行初始化,不同的是,构造函数可以有参数传入,而初始化块无参。初始化块比构造函数先执行。静态初始化块与初始化块相比带有static关键字。并且随着类的加载,静态初始化块只执行一次。静态初始化块比初始化块先执行。

3.代码分析:Math类

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

答:因为通过Math类的源代码可以看出,Math类虽然不是一个静态类,但是它里面的所有属性和方法都是静态的,所以可以用类名.方法名来直接调用。类的方法如下图:

3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
源代码截图如下:
我们观察源代码可以看出该构造函数被声明为私有的,所以不可以通过new方法产生对象

3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)

答:非静态的类需要使用new才能用。
当调用的方法是static类型时可以不用创建对象就能使用,使用类名.方法名来直接调用。

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用来修饰基本类型,如int型,那么被修饰的变量值不能变。但是如果是修饰引用类型变量,那么只是不能更改引用,但是该引用所指向的变量值可以变。

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

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

7.封装

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

答:
封装是把一些属性私有化,隐藏起来,只提供一些公共方法让用户访问私有属性。我们用类来封装这些属性。
结合本题:
长方形类Rectangle,其中 width, length这些属性是私有的,
圆形类Circle,属性radius是私有的。
除了部分属性私有以外,一些计算长方形圆形的方法却是公开的,用户可以调用。
封装的优点:封装体现了面向对象,只把使用方法提供给用户,而把复杂的过程和原理屏蔽不让用户所知,可以让用户更便捷;另外,属性隐藏更能有助代码的安全性。

7.2 和封装有关的关键字有哪些?
答:和封装有关的关键字:public(公共的),private(私有的),default(默认的、无符号),protected(保卫的)

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

拍照:

1.对方姓名:陈瑀
2.完成题目:7-2构造函数与初始化块
3.感想:
这次在java编程中第一个运用了构造函数,知道构造函数分为有参无参等类型,还有默认构造函数等概念,初始化块也有静态非静态的区别,同时我也知道可以在编译器中快捷生成构造函数的小技巧,减少工作量;两个人结对编程,可以交流彼此的思路,有助于编程思维的扩散和提高,每周可以进行1-2题的结对编程。

9.选做:Runnable Jar

3.码云及PTA

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

解释:因为我第一周第二周不会用这个jar,现在才会用,所以第一周和第二周代码量为0,好像这个jar程序自动把统计代码量归到第三周去了,我现在没办法把第一周第二周的代码量添加上去。所以我现在统计的是本周第三周的代码量。
周次|总代码量|新增代码量|总文件数|新增文件数|

posted on 2017-09-30 16:10  阿哈·  阅读(270)  评论(1编辑  收藏  举报