第二次作业
1. 本周学习总结
- Java的数据类型
包括布尔型(boolean)true
、false
;整型byte
、short
、int
;浮点型float
、double
。 - Java中的引用类型
包括数组,类,接口,null类型 - Java语言基础
包括整型常量
的应用,char型
的应用,浮点型
的应用,还有应用变量
的要求和用法,各种计算机运算符
和运算方法;Wrapper(包装类)的使用
2. 书面作业
1.String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
- String使用
private final char value[]
来实现字符串的存储,也就是说String对象创建之后,就不能
再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable),使用堆
来存储字符串。
1.2 分析其构造函数public String(char value[])
的作用?
- String类的构造函数,生成String字符串对象,通过char数组,用来从char数组转换为String类,接口中的参数是一个char数组。
1.3 阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?(重点)
- 所谓String的不可变性,是说一旦字符串被创建,对其所做的任何修改都会生成新的字符串对象。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
- String和字符数组可以相互转化,我们经常需要将数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作,这时就需要将char类型的数组进行转换,转换成String类型。
2.StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
-
当我们在创建一个String对象的时候,系统会在内存里开辟出一个空间用来存储我们所创建的String对象。然而当我们去修改所创建String对象的实例时,那么,之前创建的String对象并不会消失。而是从新创建了个对象并在内存中开辟了一段新的空间,包含了你所修改的内容。
当我们创建了一个String Builder对象的时候,系统同样会在内存中开辟一段空间。但是,当我们对这个对象进行追加、移除、替换和插入时,并不会重新的创建一个StringBuilder包含所修该得内容,而是引用的同一个实例。同时我们注意的就是StringBuilder的容量问题。当我们设置了容量时,那么,值一旦超出了这个容量,StringBuilder的容量会自动翻倍。StringBuilder在被实例后会产生一个容量,此容量要大于或等于值的长度。如果容量小于此值的长度,那么容量会成倍的递增。在递增的同时,也会创建一个StringBuilder的对象,只不过在创建这个新对象的同时所引用的是同一个实例,这就是所谓的“StringBuilder是可改变的”。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)
方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)
方法时,是如何实现添加字符的操作?
- 追加char数组参数到此序列的子数组的字符串表示形式。
- 内部使用字符数组存放数组
3.字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
- 输出的是true,字符串常量池直接可以用“”判断两个字符串是否相等。
**3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?** - “”用于比较两个引用类型变量存放的引用是否相等,即地址是否相等,引用的地址不同,所以不能使用“”比较;应该使用“equals”比较两个值是否相等,用法
a.equals(b)
。
4.Wrapper(包装类)
4.1 Integer i = 100;//100
是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;
这一串命令中包含了些什么操作?
- 自动装箱的应用;包含了自动装箱,自动拆箱,自动装箱和自动拆箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢? - 包装类即使把基本类型变成对象类型,基本数据类型变为对象的好处:取值范围变大;对象包装类的好处:可以将基本数据和字符串之间进行互相转换。
5.实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
- 队友:郭启鹏
- 这样合作使代码的正确率提高了很多,出现错误可以两个人一起解决,使解决问题的速度和质量得到了提高,这样也降低了编程的难度,毕竟两个人的力量要强大一点,这让我懂得合作很重要。
5.2 PTA-1StringBuilder - 用到了
Scanner
,还会使用到截取和拼接字符串;得到身份信息用函数String.substring
对数组中的信息进行获取。
5.3 PTA-3身份证排序。并回答:使用sort2
方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢? - 这道题也有用到字符的截取,还有字符的比较;利用String和Array两个类对数组进行数据处理,要降序的话,直接在输入时逆序就好了。
5.4 PTA-4综合小测验 - 是对多维数组中不规则数组应用;利用switch函数对
fib
,sort
,search
,getBirthDate
进行选择应用,还有Arrays,String这两个类。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList? - 是关于ArrayList入门操作的一道题,使用
add
进行对数组添加元素,remove
用来删除数组中的元素,get
获取元素,size
返回数组元素中的个数等等。 - ArrayList是动态数组,可以动态的增加和减少元素,更灵活的控制数组。
5-5(浮点数计算) - 输入的字符串如果想要精确一点,可以使用BigDecimal类来更精细的计算。
3. 码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
2 | 57 | 57 | 4 | 4 |