201621123008 《Java程序设计》 第三周学习总结
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程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
随机推荐
- Executor框架(七)Future 接口、FutureTask类
Future接口介绍 Future 表示异步计算的结果.它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果. Future 一般由 ExecutorService 的submi ...
- 显式锁(四)Lock的等待通知机制Condition
任意一个Java对象,都拥有一组监视器方法(定义在根类Object上),主要包括:wait( ).wait(long timeout).notify().notifyAll()方法:这些方法与关 ...
- sqlserver操作命令
启动命令:Net Start MSSqlServer 暂停命令:Net Pause MSSqlServer 重新启动暂停的命令:Net Continue MSSqlServer 停止命令:Net st ...
- python写一个简单的CMS识别
前言: 收集了一点cms路径,打算在写一个.之前已经写了 有需要的可以自己翻我的博客 思路: 网站添加路径判断是否为200,并且无过滤列表中的字符 代码: import requests import ...
- django-媒体文件,图片存储
1.settings.py # 媒体文件 MEDIA_ROOT = 'media/'
- faker模块基本用法
引言: 自动化脚本编写时,一般会遇到需要构造数据的情况,比如注册时的基本信息:每次执行脚本都要重新构造数据显然是很费时费力的事情,所以可以用到faker模块来构造:方便快捷,神器也: 一.安装 pip ...
- c++官方文档-class
#include <iostream> using namespace std; class Circle { double radius; public: Circle(double r ...
- win10下装的ubuntu14.04双系统,ubuntu系统访问win10磁盘问题
参考:https://blog.csdn.net/u010426270/article/details/52420231 ubuntu下 解决方法: 1. 在终端输入如下命令,查看分区挂载情况 sud ...
- Spring DevTools 介绍
Spring DevTools 介绍 Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快. spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间 ...
- GPO配置时的注意事项
当两个组策略冲突时: 1.如在同一层OU,后生效的组策略有效,优先级高.在组织单元的'链接的组策略对象'中标明了组策略的先后应用次序,其中下面的组策略先应用,上面的组策略后应用,即上面的组策略优先级高 ...