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

1. 本周学习总结

初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识点组织起来。请使用工具画出本周学习到的知识点及知识点之间的联系。步骤如下
1.1 写出你认为本周学习中比较重要的知识点关键词,如类、对象、封装

答:类、对象、静态属性、构建函数、封装、继承、多态、静态、非静态、重载、装饰符

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

参考资料:

XMind
如何使用XMind
Onenote
Onenote教程

2. 书面作业

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

注意:属性必须修饰为为private
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址。

答:

git地址

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

答:面向对象的话,只需要编辑一个类,把它的方法都放在里面,要用的时候直接引用就可以。而面向过程的话,它的每个行为都得一个个去定义,并以变量、过程方法的方式去描述。

参考文件:

有理数C语言例程下载

2. 构造函数与初始化块

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

答:

构造函数主要用于在类的对象创建时对它进行定义初始化。特征:它没有返回值,也不能对它用void来进行修饰,构造函数的命名必须和类名完全相同,它也不能直接被调用,必须在创建对象时通过new运算符才能够自动调用。

2.2 如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
答:有,当我们定义了一个类定义的时候,通常情况下系统都会默认一个构造函数,而此默认构造函数不带参数的。
没有,当我们在类中自定义了含参的构造函数时,系统不会默认构造函数,需要手动书写出来。

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

答:



第一个构造函数是对对象进行定义初始化

第二个构造函数是针对一个数组,根据给出的要转换的第一个字符开始根据指定长度不断将里面的数一个个进行转换

第三个构造函数是将数组里面的字符全部进行转换

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

答:

初始化块能够初始静态成员变量,也可以执行初始化代码,优先级最高,并且仅在类第一次被加载的时候执行;而构造函数优先级低于初始化块,每次生成对象就执行一次。
静态初始化块先执行。
初始化块每次生成对象时都执行一次,可以针对多个重载构造函数进行代码复用,而静态初始化块只在类第一次被加载时执行;静态初始化块的优先级高于初始化块
静态初始化块先执行。

3.代码分析:Math类

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

答:java.lang.Math是静态类,所以不需要在新建Math对象。

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

答:

会出现以下错误:

源代码:

原因:该函数是私有的,不可见,不能从外部调用,所以不能 new Math()

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

答:当定义一个类的时候,如果该类前面有加static这类关键词就可以直接用类的名字直接引用属性或者方法,不必进行创建相应对象就可以使用;而对于没有这个关键词的,就需要先对类实例化,也就是对这个对象new出来,然后才能使用

4. 重载Overload

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

答:

    void test() { 
        System.out.println("No parameters");
     }

    void test(double a) {
        System.out.println("Inside test(double) a: " + a);
    }

对于如上的代码来说,同一个 test 方法被调用两次,参数的个数或类型不同,但他们的作用一般是相同的 ,即为重载。

   public  Student(){
       private String name;
       private String age;
    public Student(){
        }
    public Student(String name){
         this.name = name;
    }
    public Student(String name,String age){
        this.name = name;
        this.age = age;
    }
  }

对于如上的代码来说,,第一个是无参的,第二个有一个参数,第三个有两个参数,但这些构造函数都必须有它自己唯一的参数列表,即为构造函数的重载

区分:多个构造函数是否有唯一的参数列表,若有的话,为构造函数重载,无则为重载。

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类

答:

参考资料:

JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
Java8DateTimeTest.java

7. 封装

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

答:

封装可以把一系列具有相同特征的属性放在一个对象里,并且把该对象的属性给私有化,然后提供一些可以被外界访问该对象的属性的方法。
好处:1.安全:将对象属性私有化之后只能通过getter和setter方法对外提供得到和设置的方法。2.方便:这些功能写好后,以后每次要用可以直接调用。

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

答:继承 多态 修饰符

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

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

答:

1.对方姓名:姚雯婷。2.所完成的题目:7-3 3.感想:在编写过程中,我们先是各自编写,之后有不懂的地方再互相讨论,而在强制转换那里遇到了问题,不过鉴于本题不算很难,还是在一起讨论加百度后完成了这道题目,还是挺有帮助的。

9. 选做:Runnable Jar

我们以前编写的程序,必须打开Eclipse或者将相应的.class文件拷贝出来在命令行下执行相应命令才能运行,如果.class文件较多且类文件中有包名,需要将完整的目录结构及文件拷贝出来,才能运行。现在希望将Eclipse项目中的Java文件打成一个可运行的jar包,在命令行直接运行。改造题目6,使其从命令行接收参数,参数为年-月-日,如1999-09-09。最后将项目打成可运行的jar包,然后在命令行通过java -jar运行,并截图。参考文件如下:

Eclipse生成Runnable jar

3. 码云及PTA

3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

(由于我自己之前没搞懂这软件的原因,表格内容有点奇怪,不要在意。。)

周次 总代码量 新增代码量 总文件数 新增文件数
2 141 141 6 6
3 445 380 10 3

参考文件:

第3周作业参考文件

原文地址:https://www.cnblogs.com/yezhuoyao/p/7598857.html