神离

博客园 首页 联系 订阅 管理

1. 本周学习总结

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

对象的属性与方法,类的定义,对象的引用,封装性,修饰符,构造函数,

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


2. 书面作业

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

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



https://gitee.com/lddrdwr/java201621123039/blob/master/week03/src/week03/Rational.ja

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

面向对象是对象调用方法,实现细节对象不知道,往往有现成的方法调用,面向过程是需要知道实现细节,需要自己编写过程的每一步

2.构造函数与初始化块

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

作用:在定义了一个类型之后,为了能使用它,必须把这个类型具体化,也就是指定为一个具体的对象。而构造函数就是从定义出发,建立与定义相对应的对象

构造函数与toString构造了Person类的无参构造函数:

public Person(){ System.out.println("This is constructor"); System.out.printf("%s,%d,%s,%d%n", name,age,gender,id); }
构造了Person类的有参构造函数:

public Person(String name , int age , boolean gender ){ this.name = name; this.age = age; this.gender = gender; }
对name age gender等参数进行了赋值

函数格式:public 类名() { }

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

不写构造函数也存在默认的无参构造函数,即便类中没有定义构造函数,也可以创建对象;
默认的无参数的构造函数在一个类中只有带参的构造函数的情况时不存在

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

由于配置源代码压缩包时不断出错,使用其他同学的查看


第一个是无参函数,返回字符串长度。
第二个是无参函数,判断字符串是否为空。
第三个是有参函数,忽略大小写判断字符字典顺序大小。

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

初始化块可以初始化所有对象,构造函数只能初始化相应的对象
静态初始化块先运行;构造函数和实例初始化后运行

不同:静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员.

非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量.

初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化

执行顺序:静态初始化块-》初始化块-》构造函数

3.代码分析:Math类

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

Math类里面的所有属性和方法都是静态的,不应使用new,使用new会出错误,可以用类名.方法名来直接调用。

3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。

错误提示The constructor Math() is not visible由源代码看出main被声明成私有的,不可使用new来新建

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

当对象不是static时,使用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(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?

封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。

本题几何图形的长宽属性为私有,而计算周长面积的方法是可见的;
可以保护私有数据,修改属性的可见性来限制对属性的访问。

7.2 和封装有关的关键字有哪些?

private:将内部设为私有,内部细节未知
public:内部细节可知

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

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

2.题目:第六题6有理数改写成面向对象形式

3.感想:这次合作暴露出我自己很多问题,对于面向对象的理解之前只是停留在概念上,这次动手改写扫除了之前很多的误区,初期主要困难在于c中的cin语句在改写为system.in还需要加上public void setV1(int v1) { this.v1 = v1; }
这样的形式,说明了我对于对象的理解还是不够透彻,之后一些函数上的细节在和队友讨论过后也成功解决,最大的感受就是java在复杂函数上调用的简便,直接使用方法,而不需要知道细节的确比c中写出过程要快速的多。

3. 使用码云管理Java代码

3.1 GIT使用

在码云上建立你的项目(项目名:java+学号,如java201321123001)。同步到本机后,建立exp1包,编写HelloWorld,并推送到远程仓库。请截图本机(本地项目、本地仓库)、远程仓库。加分项:使用命令行Git对代码进行管理。

3.2 截图题集“Java基本语法”PTA提交列表

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中,可使用最新版的代码统计工具的-history参数,详细用法见项目wiki地址。表格如下所示:

周次 行数 新增行数 文件数 新增文件数
1 73 73 2 2
2 281 281 9 9
3 908 908 16 16
posted on 2017-10-01 10:26  神离  阅读(272)  评论(1编辑  收藏  举报