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

Week03-面向对象入门

1.本周学习总结

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

  • 本周学习的关键词有对象、类、引用、封装、修饰符、构造函数。
    1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来

2. 书面作业

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

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

https://gitee.com/LvXingZheDeMeng/Java201621123087/blob/master/Mainyoulishu.java
1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?

  • 面向对象是把一个函数包装,变成一个类,然后再对类进行对象化,进行修改,可以直接给人调用,而面向过程就只是把一条条代码给展示出来!如果从代码上看,这两个没什么区别。但从使用来看,面向对象可以有一个类生成几个类,就是我们说的继承,派生等,这是面向过程没有的!面向对象也和面向过程在处理上有很大不同,他可以函数重载,而过程不可以!总之,对象比过程高级一点,代码量少一点,但有时编起来还是过程比较简单!

2. 构造函数与初始化块

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

  • 给创建的对象建立一个标识符;
  • 为对象数据成员开辟内存空间;
  • 完成对象数据成员的初始化。
    函数格式特征:
  • 构造方法的方法名必须与类名相同
  • 没有返回值,不能用return
  • 一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造方法。
  • 构造方法可以重载
    2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
  • 不写构造函数系统会默认一个没有参数构造函数
  • 没有,为了保持系统的准确性
    2.3 查看String类的源代码,找出3个看得懂的String类的构造函数,并使用自己的话描述这3个构造函数的区别。
  • 初始化一个新string创建的对象,使其表示一个空字符序列
  • 通过byte数组,从offset开始,总共length长的字节构造字符串对象
  • 构造一个original的副本,拷贝一个original
    2.4 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行
  • 创建类对象的时候构造代码块,创建一个对象执行一次,代码块都是用于初始化的,而构造函数是用于创建对象的。
  • 静态块在类第一次加载时执行。初始化块在调用构造方法是执行。静态块只执行一次,初始化块可以执行多次。静态初始化先执行。

3.代码分析:Math类

3.1 使用java.lang.Math类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
3.2 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
3.3 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)

  • 构造函数被声明为私有的,就是说明不能被外部调用,所以不能new出来一个新的对象
  • 基本数据类型不需要new而直接定义,而引用数据类型在定义实例时需要new实例对象。一个类中有类的方法,使用static修饰的,和对象的方法,即没有static修饰的方法,类的方法可以直接使用类名加点加方法名调用,对象的方法必须先new一个实例,再由实例调用。

4. 重载Overload

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

  • 重载就是同一个类中可以有多个名称相同的方法,但是参数个数或类型不同。
  • 构造函数的重载:构造函数具有相同的名字,而参数的个数或参数类型不相同。
  • 区分重载方法主要要看参数来区分
    4.2 在java.lang.Math类中举出1个方法重载的例子?
  • 由上图可以看出double类型参数分别为sin,cos,tan,返回值分别为double的正弦值,余弦值,正切值。

5. 代码阅读: final

final修饰的变量不能改变,为什么如下代码却可正常运行?

final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
  • final修饰in引用型变量,引用的地址变量不能变,但地址里储存的值可以变。

6. Java8中的时间日期类:编写函数

public static boolean isMondayToFriday()

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

7. 封装

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

  • 封装就是不允许继承与修改.可以保护类的专一性.这样你写出来的类别人就只能使用里面的方法而不能对类进行修改了。
  • 可重复调用类中的属性 提高安全性
    7.2 和封装有关的关键字有哪些?
  • private protected

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

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

  • 跟我合作的同学叫做陈星源,我们一起做了面向对象改造数据结构有理数,和他一起我学习到了十分多有用的知识。两个人的思想往往会不同,他的想法会给我不一样的思路。

3. 码云及PTA

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

posted on 2017-10-01 01:05  网络1613张恒  阅读(256)  评论(3编辑  收藏  举报

导航