《Java课程》第三周学习总结

1. 本周学习总结

1.1写出你认为本周学习中比较重要的知识点关键词。

  • 继承,多态,封装。
  • 类,对象,方法。
  • new关键字,private关键字,public关键字,以及默认的(default)关键字之间。

1.2思维导图

2.书面作业

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

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

  • 类的代码
  • Add函数
  • Main函数
  • Gcd函数(取最大公约数)

(git地址)[https://gitee.com/WenMangSu/Week03/blob/master/有理数.java]

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

  • 面向对象编程中,属性需要封装;在面向过程编程中,运用的是struct数据库来构造一个数据库,之后再编写相应的函数,其中参数为struct的变量。
  • 在面向对象编程中,运用的是class来新建一个类,然后再在类中编写方法,通过new关键字实例化对象之后new Rational().add(r1,r2)来调用类中的方法。

2.构造函数与初始化块

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

  • 第一问:Person类的构造有参函数Person(String name, int age, boolean gender)可以用来给对象进行private属性的初始化。
  • 第二问:函数格式特征,没有返回值的类型、不同构造方法的括号中的参数个数以及类型可以不同。

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

  • 第一问:有,在编译之后系统内部会默认生成一个无参构造函数。
  • 第二问:没有,如果已经有一个带参的构造函数,就不会生成默认的无参构造了。

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

1.public String()新建一个空的字符串对象
2.public String(char []value)将字符数组转换为字符串对象
3.public String(byte []bytes)将字节数组转换为字符串对象

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

  • 初始化块与构造函数的异同:
    这是初始化块

    这是静态初始化块:是用static关键字声明的代码块

  • 第一问:初始化块会先于构造函数执行。

  • 第二问:初始化块在每次调用构造函数时都会执行,静态初始化块只会执行一次,且静态初始化块会在初始化块之前执行。

3.代码分析:Math类

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

答:因为Math类的方法声明是静态的,占用的是栈内存和堆内存之外的空间,是属于整个类的,不需要再通过new关键字申请堆内存空间来创建一个调用方法的Math对象,可以直接调用该对象上相应的方法。

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

  • 会出现如下的错误。
  • Math源代码分析的原因

    Math类源代码的开头就已经很明确的注释出,本类不能让任何对象实例化此类。

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

  • 需要new出来才能使用的对象:我们需要调用其所在类中的方法时,该对象需要通过new关键字实例化之后才能使用。
  • 调用通过static关键字声明的方法时,可以不需要通过new出对象就可以使用。

4.重载Overload

4.1 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?

  • 重载就是在已有的方法的基础上,在同一类中创建相同方法名称的方法,称为方法的重载。
  • 构造函数的重载就是,相同的构造函数,其导入的参数的个数与类型不同,以此来初始化出不同的对象。
  • 可以通过重载方法的返回值类型(虽然不建议更改返回值类型就是了),输入的参数的个数来区分不同的重载方法。

4.2在java.lang.Math类库中举出一个方法重载的例子。

  • eg:

5. 代码阅读: final

5.1final修饰的变量不能改变,为什么如下代码却可正常运行?final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;

  • 因为此代码是在编译过程结束之前就已经执行完的,如果是通过调用方法来修改final定义的数组时,就会出现错误。

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

7.封装

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

  • 在面向对象中,封装是只将用private声明的属性等限制,只能够在class中,也就是类的内部中调用。
  • 好处:这样对象在调用类中方法的时候就不能直接访问到对象的private属性,不然随意更改private定义的属性很容易出现运行混乱的结果。

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

  • Answer:public公共声明,default默认即为default,private私有声明

8. 结对编程实践

  • 本次结对编程实践的搭档是同寝室的吕炜彬同学
  • 完成题目:我们共同完成了PTA题目列表中的第四题(形状-继承)
  • 实验感想:本次结对实验中,对于利用extends关键字进行子类继承时,试验要求的两个sum计算方法的编写遇到了麻烦,但是搭档同学指出了应当在shape类中定义这两个方法,并且利用类数组来完成题目要求,问题才得以解决我感受到了结对编程的好处,两个人的想法能够快速交流。

3.码云及PTA

3.1码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
1 120 120 2 2
2 280 160 5 3
3 590 310 10 5
posted @ 2017-10-01 18:40  文不盲的苏些手丶  阅读(262)  评论(0)    收藏  举报