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,表格数据是后期补上去的。

201621123008 《Java程序设计》 第三周学习总结的更多相关文章

  1. Java程序设计第三周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  9. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  10. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

随机推荐

  1. Executor框架(七)Future 接口、FutureTask类

    Future接口介绍   Future 表示异步计算的结果.它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果.   Future 一般由 ExecutorService 的submi ...

  2. 显式锁(四)Lock的等待通知机制Condition

       任意一个Java对象,都拥有一组监视器方法(定义在根类Object上),主要包括:wait( ).wait(long timeout).notify().notifyAll()方法:这些方法与关 ...

  3. sqlserver操作命令

    启动命令:Net Start MSSqlServer 暂停命令:Net Pause MSSqlServer 重新启动暂停的命令:Net Continue MSSqlServer 停止命令:Net st ...

  4. python写一个简单的CMS识别

    前言: 收集了一点cms路径,打算在写一个.之前已经写了 有需要的可以自己翻我的博客 思路: 网站添加路径判断是否为200,并且无过滤列表中的字符 代码: import requests import ...

  5. django-媒体文件,图片存储

    1.settings.py # 媒体文件 MEDIA_ROOT = 'media/'

  6. faker模块基本用法

    引言: 自动化脚本编写时,一般会遇到需要构造数据的情况,比如注册时的基本信息:每次执行脚本都要重新构造数据显然是很费时费力的事情,所以可以用到faker模块来构造:方便快捷,神器也: 一.安装 pip ...

  7. c++官方文档-class

    #include <iostream> using namespace std; class Circle { double radius; public: Circle(double r ...

  8. win10下装的ubuntu14.04双系统,ubuntu系统访问win10磁盘问题

    参考:https://blog.csdn.net/u010426270/article/details/52420231 ubuntu下 解决方法: 1. 在终端输入如下命令,查看分区挂载情况 sud ...

  9. Spring DevTools 介绍

    Spring DevTools 介绍 Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快. spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间 ...

  10. GPO配置时的注意事项

    当两个组策略冲突时: 1.如在同一层OU,后生效的组策略有效,优先级高.在组织单元的'链接的组策略对象'中标明了组策略的先后应用次序,其中下面的组策略先应用,上面的组策略后应用,即上面的组策略优先级高 ...