1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词,如类、对象、封装等
关键词:类,构造函数,方法重载,方法覆盖,封装,继承,多态,类被加载的过程,static
,abstract
,final
,this
,super
关键字等。
1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。
2. 书面作业
1.以面向对象方式改造数据结构作业'有理数'(重点)
注意:属性必须修饰为为private
1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的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类构造函数被标记为private
;Math类中的实例变量以及方法都被标记为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程序设计》 第三周学习总结的更多相关文章
-
Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
-
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
-
20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
-
20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
-
21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
-
20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
-
20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
-
《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
-
20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
-
20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
随机推荐
-
复习(1)【Maven】
终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...
-
转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
-
Apple的App Analytics统计平台你必须知道的Q&;A整理与翻译
Apple的App Analytics统计平台你必须知道的Q&A整理与翻译 Apple最近在iTunesConnect里最新发布了App Analytics统计平台,提供了现有友盟统计平台和自 ...
-
HTML的结束标签问题
根据w3c的原则,xml的每个开始标签必须有一个结束标签与之对应,也就是<html>必须要有</html>结束,才是一个完整的元素,除非它是一个自封闭标签,自封闭就是<i ...
-
POJ1015 动态规划
POJ1015 问题重述: 在n个候选者中选取m个人进入陪审团.每个候选者获得两项评分:D[j],P[j].求解最佳评审团,使得在每个成员的两项评分和之差 最小的情况下,使得两项评分和之和 最大. 分 ...
-
Android 高手进阶,自己定义圆形进度条
背景介绍 在Android 开发中,我们常常遇到各种各样绚丽的控件,所以,依靠我们Android本身所带的控件是远远不够的,许多时候须要我们自定义控件,在开发的过程中.我们公司遇到了一种须要自己写的一 ...
-
URL编码表 Base64编码表 HTTP消息含义
URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5 tab 9% B 42% b 62% « %AB Ö %D6 linefeed %0A C 43% c ...
-
Flask入门第二天
一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或稍微工作是需要处理的,比如:在请求开始时,建立数据库连接:在请求开始时,根据需求进行权限校验:在请求结束时,指定数据的交互格式等.为了让每个视 ...
-
Django 自定义 过滤器和模板标签
代码布局(自定义的代码,放在哪里) 二种方式:1. 某个app特有的 -app 目录下,templatetags 文件夹 ** 必需是这个名称的包(目录中有__init__.py文件) -再到 ...
-
媒体类型(MIME类型)
# encoding=utf-8 #python 2.7.10 #xiaodeng #HTTP权威指南 #HTTP协议:超文本传输协议是在万维网上进行通信时所使用的协议方案. #媒体类型: #HTTP ...