Week03-面向对象入门

1.本周学习总结

初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识点组织起来。请使用工具画出本周学习到的知识点及知识点之间的联系。步骤如下:

1.1 写出你认为本周学习中比较重要的知识点关键词

答:本周学习的知识点:类管理机制-包、完全限定名、类路径、类与对象、封装性修饰符(public、private、无修饰符)

  • 学习如何在指定目录下加载相应的.claas文件,在不同的目录下甚至在.jar文件中加载.class文件。(-cp参数)。
  • 如何定义一个类(类名,属性,方法),创建对象。变量中存放对象的引用,使用这个引用可以调用对象的属性和方法。

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

2.书面作业

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

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

git地址:https://gitee.com/jmu201621123003/JavaLearn.git

代码主要截图:







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

答:

  • 面向过程编程:主要组成有函数和main函数,函数用来实现各个功能。
  • 面向对象编程:主要考虑类的设计和对象,对象是重要点。

2.构造函数与初始化块

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

答:

1、 构造函数可以对定义的类进行初始化操作,可以对类的各个属性进行初始化。

2、 函数格式可以分为有参和无参两种形式。而构造函数的特点是:函数名与类名相同,且函数没有返回类型(注意:无返回但不是void).

如:Person无参构造函数为

	public Person()
{
System.out.println("This is constructor");
System.out.printf("%s,%d,%s,%d%n", name,age,gender,id);
}

与Person有参构造函数

public Person(String name,int age, boolean gender) {
this.name = name;
this.gender = gender;
this.age = age; }

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

答:类不定义构造函数时,系统会默认有一个无参构造方法。当类中有带参构造函数时它不存在无参的构造函数,这时需要自己定义一个无参的显示构造函数。否则编译会报错。

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

答:

  • String() 创建一个空的字符串对象。
public String() {
this.value = new char[0];
}
  • String(char[] value) 用一个字符数组来创建一个String对象
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
  • String(byte[] bytes,int offset,int length)通过byte数组,从offset开始,总共length长的字节构造字符串对象
private static void checkBounds(byte[] bytes, int offset, int length) {
if (length < 0)
throw new StringIndexOutOfBoundsException(length);
if (offset < 0)
throw new StringIndexOutOfBoundsException(offset);
if (offset > bytes.length - length)
throw new StringIndexOutOfBoundsException(offset + length);
}

区别:String()与另外两个相比,没有传入参数。

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

答:在PTA(构造函数与初始化块)题中

1、先执行静态初始化块(由static修饰)

 static{
System.out.println("This is static initialization block");
}

2、 在执行初始化块(无修饰符)

{   id=cout;
System.out.printf("This is initialization block, id is %d%n",id);
cout++;
}

3、 最后执行构造函数

public Person()
{
System.out.println("This is constructor");
System.out.printf("%s,%d,%s,%d%n", name,age,gender,id);
}

最后执行结果为:

This is static initialization block

This is initialization block, id is 0

This is initialization block, id is 1

This is initialization block, id is 2

Person [name=c, age=10, gender=false, id=2]

Person [name=b, age=12, gender=true, id=1]

Person [name=a, age=11, gender=false, id=0]

异同:静态初始化块和静态变量都加载到系统的过程中,静态初始化块只执行一次,执行在类的第一次使用时,而有一个对象就执行一次构造函数和初始化块(无修饰符)。

3.代码分析:Math类

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

答:Math类是jdk提供的工具类(但不是静态类),其构造器私有化,就无法创建对象。如下源代码

 public final class Math {
/**
* Don't let anyone instantiate this class.
*/
private Math() {}

Math类中的方法都是静态方法(都定义为static)。静态方法在累加载时已经申明,不参与对象实例化过程,与对象创建无关。

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

答:编译器会一直报错, Math cannot be resolved to a variable。Math类中的方法都是静态方法(都定义为static)。

一个方法是静态的,它就属于整个类,可以通过类型直接引用,即通过类名.方法直接访问,无需new。(参考百度知道)。

如Math类中的方法

public static final double PI = 3.14159265358979323846;

public static double sin(double a) { return StrictMath.sin(a); }

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

答:当一个方法没有被定义为static时,就需要new一个使用对象来调用该方法。当方法声明为static时就可以不用创建相应的对象。

4.重载Overload

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

答:

  • 重载:在同一个类中,方法名或函数名相同,但参数类型不同或参数数量不同、参数顺序不同。
  • 构造函数重载:在同一个类中,有多个同名但参数类型、数量不同的构造函数。
  • 区分:当一个重载的方法被调用时,Java 在调用方法的参数和方法的自变量之间寻找匹配。在一些情况下,Java 的自动类型转换也适用于重载方法的自变量。构造函数使用时通过new来调用。(参考JAVA 方法重载和构造函数重载 )

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

答:如

 public static int round(float a) {
if (a != 0x1.fffffep-2f) // greatest float value less than 0.5
return (int)floor(a + 0.5f);
else
return 0;
}
public static long round(double a) {
if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
return (long)floor(a + 0.5d);
else
return 0;
}

以上两个函数返回类型和参数类型不同,但函数名相同。

5. 代码阅读: final

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

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

答:

  • final基本语法:

    对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
  • 但引用变量(即地址)被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

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

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

截图:关键代码。

提示:使用LocalDateTime, DayOfWeek类

答:没来得及打,后续会亲自去编写....

7.封装

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

答:

  • 封装就是将类的属性设置为私有化,但类中的方法可以被公有调用访问私有属性。将类的属性用private修饰。
  • 好处:

    (1) 隐藏类的实现细节;

    (2) 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制

    逻辑,限制对属性的不合理操作;

    (3) 便于修改,增强代码的可维护性;

    (引用百度)

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

答:private、public、protected。

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

答:

  • 结对对象:周文华
  • 题目:构造函数与初始化块
  • 感想:在这题中,我们仍延续上次的方式,先各自进行尝试,有问题再互相讨论。在该题中,虽有提示使用static关键字,但我仍然有些摸不着头脑,对于id的初始化和后续不同对象的不同id如何变化还是很困惑。通过和队友的讨论,互相学习,我知道了static的具体用法。我的解法是:先在Person类中定义一个static的基本int型的变量cou。在实例化初始块中将static变量cout的值赋给id,再对cout进行加加操作,使得每个person对象在调用时,都能再次加载实例化初始块,从而使得cout的值能完成加一操作。(在此过程中,仍出现第一次id为1,但打印每个对象时,每个对象的id却都为1)。在此次解题中,队友给我的帮助比较多,很多是我再询问,很惭愧。很感谢我的队友。

    -照片:

3. 码云及PTA

3.1. 码云代码提交记录

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


3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)

  • 提交列表

  • 排名表

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
3 446 308 8 4

Week03-Java学习笔记第三次作业的更多相关文章

  1. 2019暑假Java学习笔记(三)

    目录 面向对象 对象 构造方法 引用与对象实例 static final 封装 this 继承 super 方法重载与重写 多态 抽象类 接口 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 ...

  2. Java学习笔记(三)——静态导入,package-info,Fall-through

    [前面的话] 算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年 ...

  3. Java 学习笔记 ------第三章 基础语法

    本章学习目标: 认识类型与变量 学习运算符的基本使用 了解类型转换细节 运用基本流程语法 一.类型(基本类型) 所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度存比较经济,利用程序语法告诉JV ...

  4. Java学习笔记(三)

    今天主要学习了ant ant概述 ant是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant 开发环境: Sy ...

  5. java学习笔记(三)字符串

    字符串String 创建方法: 一·通过new创建  String  str1= new String("abc"); 二 直接创建   String str2="abc ...

  6. Java学习笔记(三)Java2D组件

    一  概述 Java2D的一切都基于java.awt包中的Graphics2D类,它是Graphics的子类. 为了绘制图形,需要使用面板作为画布,例如使用JPanel作为画布,面板有一个paintC ...

  7. Java学习笔记(三)——封装、继承、多态

    一.封装 概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 实现步骤: 修改属性的可见性——设为private. 创建getter/se ...

  8. Java学习笔记一:三步搭建Java开发环境

    Java开发环境搭建 一:安装JDK: 1.下载地址:http://www.oracle.com/technetwork/java/javase/downloads 非常显眼的下载界面 2.点击下载后 ...

  9. JAVA学习笔记——(三)

    今日内容介绍 1.引用类型变量的创建及使用 2.流程控制语句之选择语句 3.流程控制语句之循环语句 4.循环高级 01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scan ...

随机推荐

  1. Pimpl Idiom /handle body idiom

    在读<Effective C++>和项目源代码时,看到pImpl Idiom.它可以用来降低文件间的编译依赖关系,通过把一个Class分成两个Class,一个只提供接口,另一个负责实现该接 ...

  2. Django总结及Form组件

    一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),c ...

  3. windows8系统安装MongoDB 2.6.3配置服务启动

    转自:http://winfan.net/655.html 1. 下载mongodb包2. 解压zip至 D:\MongoDB3. 创建目录 D:\MongoDB\data\db4. 创建日志目录 D ...

  4. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  5. linux中相关服务不能访问的排错技巧

    Linux相关服务不能访问的排错步骤,以HTTP服务为例: 一.服务端排查思路: 1.检查SELinux是否关闭(针对CentOS6系统)  (1)临时关闭      setenforce 0  (2 ...

  6. javascript DOM dindow.docunment对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  7. HashMap与ConcurrentHashMap、HashTable

    (1)HashMap的线程不安全原因一:死循环 原因在于HashMap在多线程情况下,执行resize()进行扩容时容易造成死循环. 扩容思路为它要创建一个大小为原来两倍的数组,保证新的容量仍为2的N ...

  8. SpringBoot MockMVC

    使用MockMvc,我们可以完成基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. @RunWith(S ...

  9. 谈谈对Canal(增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  10. Java中遍历map的四种方法 - 转载

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...