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


    Week03-面向对象入门

    1.本周学习总结

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

      关键词:类,对象,封装,继承,this关键字,final关键字,static关键字,构造函数。

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

    2.书面作业

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

    注意:属性必须修饰为为private
    1.1 截图你主要代码(需要在程序中出现你的学号姓名)并粘贴程序的git地址。
    1.2 对比你的代码与历程的代码,说明面向对象编程与面向过程编程有何区别?

    有理数的git地址

      面向对象编程需要初始化,要将类进行封装,里面的属性、方法就不会被看见,而用户可以直接使用public来实现某一方法的调用,是整体的感觉。而面向过程编程更注重的是解决一个问题,抛出问题,使用函数去直接实现,而不用包装啊之类的,函数也是可见的,是零零散散的。就像开车的例子,面先对象就是你只需要知道踩油门会加速就行,而面向过程的话就是你要了解为什么踩油门会加速,里面的原理构造等等。可见生活中面向对象更为人所接受。

    2.构造函数与初始化块

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

      构造函数的作用:初始化对象的属性,在对象类型定义后能给他分配空间来使用。

    class Demo{
        Demo(){
        System.out.println("构造的例子");
       }
    }
    

    特征:构造函数的名称和类的名是一样的,可以是有参构造函数和无参(即默认)构造函数。

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

      类中不写构造函数的话,会自动产生一个无参构造函数。
      一个类中只有带参的构造函数,可以有不带参数的默认构造函数,即同名但不同参数。

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

    图1

    初始化一个新创建的的对象,表示的是一个空字符串且会一直在内存中。

    图2

    使用StringBuffer这个对象实现初始化,StringBuffer是线程安全的。用synchronized关键字修饰。

    修饰类时其作用的范围是synchronized后面括号括起来的部分,作用主对象是这个类的所有对象。

    图3

    数组对象初始化,以便它表示当前包含在字符数组参数中的字符序列。当字符数组的内容被复制,字符数组的后续修改不会影响新创建的字符串。

    第一个构造函数是没有参数的。其他两个都是有参数的。第二个构造函数是StringBuffer要考虑多线程问题,需要用关键字synchronized来给StringBuffer加锁。

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

      构造函数和初始化块都是对对象进行初始化,但是,构造函数时要和类的名一样,初始化块就不需要。写个代码确认一下:

    public class Main0 {
    
    	public static void main(String[] args) {
    		new Person();
    
    	}
    
    }
    	class Person{
    
    		static{
    			System.out.println("这是静态初始化块");
    		}
    		{
    			System.out.printf("这是初始化块\n");
    		}
    	
    		public Person(){
    		
    			System.out.println("这是无参构造函数");
    		
    		
    		}
    	}
    	
    

    结果为

    PTA题目图:

    从图中可以看出,静态初始化块是先执行的,然后是初始化块,最后是构造函数(这里是无参构造函数)。

    3.代码分析:Math类

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

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

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

      通过下图(只截了一部分)我们知道Math类的所有变量和方法都是静态的,一般来讲,需要new来创建的对象,都有他自己的内部状态。对于static修饰的是不需要new来创建对象的。

      通过看源代码,我们会发现,Math类是无法建立对象的。math类有构造函数,不过它的构造函数是私有的,也就无法创建math类。

      我觉得如果这个对象内部的方法都是非static的时候,就需要new出来才可以使用。当这个对象要被调用static的方法时,那么这个时候,该对象不必创建相应对象就可以使用。

    4. 重载Overload

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

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

      重载就是对于一个类中,多个方法可以是相同的名字,但是当名字相同时,参数要求不同。比如一个人学会一门外语,他可以报培训班,也可以自学等等许多其他方法去学会。构造函数重载是函数名和类名一样,但参数类型不同,其实作用就是初始化对象。如果要区分两个不同的重载方法,可以通过参数来区别。

      如图,类型都是double型,即方法名相同,但是参数列表不同。

    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 和封装有关的关键字有哪些?

      对象封装就是将内部的属性打包起来,用公共的方法去访问私有属性,可以做到隐藏内部的实现细节。优点:1.可以让公共访问变的方便,不需要了解内部是如何实现的。2.实现了内部信息的隐藏。PTA(形状)中将长方形的长宽、圆的半径封装起来,用户就不需要明白实现的具体细节。

      和封装有关的关键字:public(公共的),private(私有的),default(默认的、无符号),protected(保卫的)

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

    找一个水平相近的同学完成1-2题实验题。开始编程前,可先对内容进行讨论。
    写出体验报告,包括以下内容:1.对方姓名。2.所完成的题目。3.感想。4.照片(上次很多同学并未贴照片,请贴上)
    姓名:郑玉波。PTA的7-2 jmu-Java-03面向对象基础-02-构造函数与初始化块。感想:结对编程的优势我想就是一来能让自己有两种想法一起思考问题,结对伙伴的想法、代码切入点都不一样,这个时候进行交流,可以学到别人的想法,这是一个人做不到的,所谓“艺多不压身”,做题的方法多了,还担心题目做不出来吗?二来当我将我的代码给对方看的时候,许多错误点在对方发角度反而看的很清楚,两人交流可比一人蛮干进步的快。

    9. 选做:Runnable Jar

    按照大神博客园上面的步骤来,果然,一会就出问题了,图1,在“Launch configuration”中找不到我要的main类出口啊,绞尽脑汁百度找到了问题所在.如图2先选中main类,找到运行方式(我的是中文版的,网上是英文教学),点击运行配置,进去后勾选图3的两个选项,这样就解决了我的第一个问题。接着要能用命令行运行,看着博客园的命令,我直接使用了,结果跳出个框,但是是一闪而过(2333333,我眼睛不是高速摄像机),好吧,我一定是哪里有错了,我想换一个命令,用"java -jar time.jar",竟然成功了!即图4(给自己鼓掌。。)。
    图1

    图2

    图3

    图4

    3. 码云及PTA

    3.1. 码云代码提交记录

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

    3.2 截图PTA题集完成情况图


    3.3 统计本周完成的代码量

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

    统计的竟然没有1与2的,直接来3,莫非是之前的记录没了?

    周次 总代码量 新增代码量 总文件数 新增文件数
    1 191 191 18 18
    2 571 380 19 1
    3 1027 456 20 1
  • 相关阅读:
    查询datatime类型
    ms的题目,无聊不妨看看
    读取客户端收藏夹资料的问题
    delphi中的DBGrid无法刷新数据
    jsp与javascript
    .net2.0 web site中的cs文件怎么编译为dll
    由传奇木马引起的遐想
    com组件的调用
    Crystal Report的奇怪问题
    算法导论15章LCS实现(c++)
  • 原文地址:https://www.cnblogs.com/bbshenme/p/7611439.html
Copyright © 2020-2023  润新知