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. java 中JFinal getModel方法和数据库使用出现问题解决办法

    JFinal getModel方法(从页面表单中获取Model对象)+数据库存储问题 一.getmodel方法 1.在JConfig配置类中的数据库映射(存储到数据库时需要此配置) public vo ...

  2. QQ空间动态内容,好友信息,点赞爬虫脚本

    一.安装基础的软件包: 1.准备好火狐浏览器,并下载geckodriver,将geckodriver加入到环境变量:下载geckodriver的地址:https://pan.baidu.com/s/1 ...

  3. SSO 单点登录的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  4. web标准的理解

    首先,什么是web标准?web标准是w3c组织为解决跨浏览器兼容问题而推出的关于网页开发时应遵守的规范.在网页的四个部分中网页的内容是由网页开发者自己定义的,因此这一部分无法标准化,而网页的结构(HT ...

  5. velocity 使用笔记

    1. velocity获取字符串长度方法: 用length()就可以了,截取子字符串用substring(0,10) .$str.substring(0,3) 集合获取集合长度用:size() 2.  ...

  6. [CTSC2011]幸福路径

    题目描述 有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它的体力都会下降 ...

  7. jQuery鼠标滑动切换焦点图

    在线演示 本地下载

  8. 20165101刘天野 2018-2019-2《网络对抗技术》Exp3 免杀原理与实践

    20165101刘天野 2018-2019-2<网络对抗技术>Exp3 免杀原理与实践 1. 实践内容 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...

  9. QString类

    1.将QString所有字母大写 QString.toUpper() 2.将QString所有字母小写 QString.toLower() 3.获取字符串的字符数 QString.length() 4 ...

  10. ReactNative之Android打包APK方法(趟坑过程)

    欢迎大家加群讨论 点击链接加入群[ReactNative-解决问题交流群] :644124441 点击链接加入群[ReactNative技术交流群2] :687663534 多余的不解释了.直接上车吧 ...