• 201621123008 《Java程序设计》 第三周学习总结


    1. 本周学习总结

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

    关键词:类,构造函数,方法重载,方法覆盖,封装,继承,多态,类被加载的过程,static,abstract,finalthis,super关键字等。

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

    2. 书面作业

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

    注意:属性必须修饰为为private

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


    有理数Git地址

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

    面向对象:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

    面向过程:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    2. 构造函数与初始化块

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

    该题要求编写两个构造函数:有参;无参;

    作用:构造函数让我们有机会介入new过程,初始化对象的状态。

    特征:

    • 与类同名但无返回类型
    • 构造函数带有在初始化对象时会执行的程序代码,当建立一个新的对象时会被执行
    • 如我们没有编写构造函数,编译器会帮我们写一个无参构造函数。
    • 若我们自己写了构造函数,则编译器不会帮我们创建构造函数
    • 类可以有一个以上的构造函数,但参数类型需不同
    • 当创建新对象时,所有继承下来的构造函数将会按照继承顺序由上至下被执行,但构造函数不会被继承。

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

    • 如我们没有编写构造函数,编译器会帮我们写一个无参构造函数
    • 若我们自己写了构造函数,则编译器不会帮我们创建构造函数

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

      public String() {
        this.value = "".value;
    }  
    

    分析:这是一个无参构造函数,当我们创建一个新的String对象时,若我们不指定成员变量的状态,则会得到一个默认值。此例得到一个空的字符序列。

     public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }  
    

    分析:这是一个有参构造函数,当我们创建一个新的String对象时,可以传入一个字符数组,这个字符数组将会被复制赋给本对象相应的成员。

         public String(char value[], int offset, int count) {
            if (offset < 0) {
                throw new StringIndexOutOfBoundsException(offset);
            }
            if (count <= 0) {
                if (count < 0) {
                    throw new StringIndexOutOfBoundsException(count);
                }
                if (offset <= value.length) {
                    this.value = "".value;
                    return;
                }
            }
            // Note: offset or count might be near -1>>>1.
            if (offset > value.length - count) {
                throw new StringIndexOutOfBoundsException(offset + count);
            }
            this.value = Arrays.copyOfRange(value, offset, offset+count);
        }
    

    分析:这是一个有参构造函数,当我们创建一个新的String对象时,可以传入一个字符数组,通过设置偏移量及个数,将传入数组的相应子序列复制给对象相应的成员变量。

    综上分析:构造函数可重载,但重载的构造函数必须有不同的参数。

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

    初始化块与构造函数

    • 相同之处:都是用于给对象进行初始化
    • 不同之处:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
    • 执行顺序:初始化块→构造函数

    初始化块与静态初始化块

    • 区别:静态代码块在程序执行过程中只执行一次;代码块在每次创建对象时就会执行 ;
    • 执行顺序:静态代码块→代码块

    3.代码分析:Math类

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

    Math类的构造函数:

    private Math() {}
    

    分析:由于Math类的构造函数被标记为私有,我们无法创建出Math实例。

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

    错误信息:The constructor Math() is not visible

    分析:阅读Math类的源代码可知Math类构造函数被标记为privateMath类中的实例变量以及方法都被标记为static,若要调用Math类中的方法,无需创建Math实例,使用Math.方法即可调用相关方法。

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

    • 当一个类中的方法被标记为static时我们无需将其实例化,就可使用
    • 使用类中非静态的方法及其变量时需要将其实例化才可调用。

    4. 重载Overload

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

    重载:在类中允许出现具有相同名称的方法,这些方法必须满足其参数各不相同。主要用于创建同一方法的不同版本,以便调用。
    构造函数重载:提供了多种创建对象方式
    区分方法:根据参数的类型及个数

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

         public static int min(int a, int b) {
            return (a <= b) ? a : b;
        }
    
        public static long min(long a, long b) {
            return (a <= b) ? a : b;
        }
    
    
        public static void main(String[] args) {
    		int a=Math.min(10, 5);
    		double b=Math.min(0.3, 0.2);
    		System.out.println(a);
    		System.out.println(b);
    	}
    

    Math类中的min方法允许接收多种类型的参数。

    5. 代码阅读: final

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

    NUMBS指向的数组对象不可改变但其对象的内容可改变。

     final int[] NUMBS= {1,2,3,4,5}; 
     NUMBS[2] = 1;
     int[] temp={0,1,2};
    NUMBS=temp;
    

    此时会报错,NUMBS被标记为final也就是它在堆上对对象的指向不可变。

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

    提示:使用LocalDateTime, DayOfWeek

    • 功能:判断今天如果是周一到周五,返回true,返回false。main函数中调用该函数,如果为true则输出“工作日+姓名学号”,否则输出"休息+姓名学号"。
    • 截图:关键代码。
    import java.time.*;
    
    public class Date {
    	public static boolean isMondayToFriday() {
    		LocalDateTime localdatetime = LocalDateTime.now();
    		DayOfWeek dayofweek = localdatetime.getDayOfWeek();
    		System.out.println("LocalDateTime: " + localdatetime);
    		System.out.println("DayOfWeek: " + dayofweek);
    		if (dayofweek.equals("SUNDAY") && dayofweek.equals("Saturday")) {
    			return false;
    		}
    		return false;
    	}
    
    	public static void main(String[] args) {
    
    		System.out.println("Is it Monday to Friday?");
    		if (isMondayToFriday())
    			System.out.println("工作日  周文华  201621123008");
    		else
    			System.out.println("休息日  周文华  201621123008");
    	}
    
    }
    

    7. 封装

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

    封装:通过使用一些修饰符从而限定类中成员的作用范围,提高代码的复用性,使程序更具安全性。
    好处:具有一定的安全性;隐藏了内部的细节,不必关心其具体实现。

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

    • public
    • protect
    • default
    • private

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

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

    本周结对的对象是李天歌,我们完成的题目是7-2构造函数与初始化块,我们采取分工合作,每个人完成一个小模块。我们先讨论好大致方向,每个人分配好具体任务,按各自的目标去完成,过程算是挺顺利的。

    9. 选做:Runnable Jar

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

    package test;
    import java.util.*;
    
    public class ExportTime {
    	public static void main(String[] args) {
    		Scanner in=new Scanner(System.in);
    		String[] str=in.nextLine().split("-");
    		System.out.println(String.format("%s年%s月%s日", str[0],str[1],str[2]));
    	}
    }
    

    3. 码云及PTA

    3.1. 码云代码提交记录

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

    3.2 截图PTA题集完成情况图



    3.3 统计本周完成的代码量

    | 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数
    | -------- | -----: | :----: |
    | 1 | 94 | 94 | 4 | 4 |
    | 2 | 665 | 665 | 25 | 25 |
    | 3 | 1834 | 1834 | 30 | 30 |

    可能是eclipse的workspace更换第1,2周的代码量显示为0,表格数据是后期补上去的。

  • 相关阅读:
    DevExpress- GridControl数据导出到EXCEL
    DevExpress 如何获取Repository Item的值
    ae 栅格处理异常
    VS界面控件大小调整
    C++/cli中swtich处理命令行接收到的关键字
    Civil 3d设置横断面图样式
    反射学习
    System.Diagnostics.Process启动Civil 3D及AutoCAD
    Lisp小程序,大作用,不该放弃!
    设置曲面样式之流域
  • 原文地址:https://www.cnblogs.com/Dzwh/p/7617154.html
Copyright © 2020-2023  润新知