Week03-面向对象入门

一.本周学习总结

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

知识点关键词面向对象 对象 封装 构造函数 包机制 完全限定类名 类路径
完全限定类名就是包名加类名,这样唯一确定一个类。
类的学习中还讲了类的定义,以及还有对类属性的修饰词Private public。进一步理解了封装性的好处。
对象的学习中掌握了对象的创建以及引用。
构造函数这一块主要是完成类的初始化。

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

二.书面作业

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

  1. 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。
    博客园地址:https://gitee.com/ai-jtt/JAVAPTA
    以下是我在Rational类中写的加减法以及求最大公约数的函数,乘除法类似,类中还包含了Getter Setter函数,通过Shift+Alt+S生成。
    Main函数中用到if else if else 语句发现和C不一样。

  2. 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?
    面向过程编程里面的一个个函数展示的是完成一件事的每一个步骤,而面向对象编程不是展示处理问题的过程,而是产生对象的行为以及属性。

2. 构造函数与初始化块

  1. 结合PTA 5(构造函数与toString)说明构造函数有什么用?其函数格式有何特征?
    构造函数的作用是完成对对象的初始化。构造函数没有返回类型也不用void修饰,函数名和类名相同。
    无参构造函数的格式 修饰符 + 类名 + ( ){ } 例如:public Person( ) { System.out.println(" ");}
    有参构造函数 修饰符 + 类名 +(参数 1,参数 2) { this.属性=参数1;this.属性=参数2 ;} 例如:public Person(String name,int age)

  2. 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
    如果一个类不写构造函数,它是有默认的无参构造函数的。但是一个类只有有参构造函数的话,它默认的无参构造函数会被覆盖。

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



    这三个构造函数的参数不同,使得初始化对象的内容不同。

  4. 结合PTA(构造函数与初始化块)说明初始化块与构造函数的异同。并说明,初始化块与构造函数谁先执行?初始化块与静态初始化块有何不同,谁先执行?
    相同点:初始化块和构造函数的作用都是对对象的初始化。
    不同点:初始化块是对所有对象的初始化,而构造函数是对某一对象的初始化。
    初始化块优先构造函数执行。静态初始化块是随着类的加载而执行的,是包含在类中的,且有static修饰,优先执行,执行一次;而初始化块是随着对象的创建而执行的,创建几个对象就执行几次。

3.代码分析:Math类

  1. 使用java.lang.Math类的方法时,为什么不需要new出一个Math对象,然后调用该对象上相应的方法?
    查看Math类的源代码可以知道该类的变量和方法都是修饰为静态的(static),表明它是属于类的,并不是属于对象,使用方法时直接类名.方法即可,不需要new新对象。

  2. 如果new Math()会产生什么错误?尝试阅读Math类源代码,分析原因。
    new Math()时会报错:The constructor Math() is not visible.该构造器是不可见的。
    原因:如上题,查看Math源代码,该类的方法是静态的,是属于类的并非属于对象。不需要new 新对象。

  3. 进一步:你觉得什么样的对象需要new出来才能用,调用什么方法时不必创建相应对象就可以使用?(重点检查)
    我认为一个类中的方法没有申明为静态方法的话,要想使用该方法都得先new一个该类的对象才可以调用。
    一个类中的方法如果被static修饰,那在调用该方法时直接使用类.方法即可,不需要创建新的对象。

4. 重载Overload

  1. 什么是重载?什么是构造函数重载?怎么才能区分两个重载的方法?
    重载就是函数名相同但是参数个数以及参数类型不相同,返回类型可以相同也可以不同。
    构造函数重载就是在一个类中写两个函数名完全相同但是参数内容不同的两个函数。
    区分两个重载的方法是看参数的数目以及类型。

  2. java.lang.Math类中举出1个方法重载的例子?

5. 代码阅读: final

final修饰的变量不能改变,为什么如下代码却可正常运行?
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
因为final限定引用类型不可以修改,就是该数组的地址是不可以修改的,NUMBS={1,2};就会出错。

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

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

7. 封装

  1. 结合PTA(形状),请用自己的话简单总结一下面向对象中封装是什么意思?有何好处?
    封装就是在一个类中用一些修饰符修饰变量的方法。
    好处:使用封装可以很好的限定方法以及变量,将自己属性封装成private,只能自己使用,将方法封装成public整个包都可以使用,比较简便。也比较安全。

  2. 和封装有关的关键字有哪些?
    private 私有的 只能在类内部使用
    public 公开的 任何类都可以使用
    default 默认的 同一个包内的类都可以使用
    protected 保卫的 被该修饰符修饰之后子类可以使用。

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

结对伙伴:吴雅思
结对题目:PTA 7-2 构造函数与初始化块
感想:结对编程真的效率很高,两个人一起讨论什么是静态初始化块,什么是初始化块,什么是构造函数,不会就百度,百度之后在讲出自己的理解,这样对知识点掌握很扎实,而且用起来很顺,讨论之后思路更加清晰,想法更加多,编程更加顺利。我感觉这样会事半功倍。

9. 选做:Runnable Jar






不知道为什么会是无法加载。

三.码云及PTA

  1. 码云代码提交记录


  2. 截图PTA题集完成情况图
    需要有两张图(1. 排名图。2.PTA提交列表图)


  3. 统计本周完成的代码量

    第一周和第二周均显示为0,我认为是文件不同,造成的。我用的是Week03和Week02文件名。

周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 0 0 0 0
3 390 390 8 8
posted @ 2017-10-01 09:30  ❤jtt  阅读(333)  评论(1)    收藏  举报