201621123014《JAVA程序设计》第2周学习总结

1. 本周学习总结

引用数据类型:JAVA定义字符串实际上是创建字符串的引用,将引用指向需要的字符串。
字符串常量池:直接对引用赋值时,会先在字符串中搜索是否有这个对象,已有则不创建直接指向它。
String不变性:修改string,实际上是分配新的字符串对象,然后将引用指向新的对象,与C语言不同。
StringBuilder:为了应对String不变性,为了频繁修改字符串而不生存新对象的函数。
包装类:java是面向对象的语言,但基本数据类型本身不是对象,包装类可以让数据类型变成对象,方便编程。

2.书面作业

1.String-使用Eclipse关联jdk源代码

1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
答:
用栈来存储字符串。

1.2 分析其构造函数public String(char value[])的作用?
答:将目标char数组复制生成字符串对象,
1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
答:在java中,创建一个string字符串,相当于系统分配内容,并创建一个这个字符串的引用。当改变这个字符串引用时,相当于分配一个新的内容,然后将这个引用指向新的内容,而不会改变原来系统分配的内容,这就是string的不变性。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
答:String是类的一种,指的是字符串类,字符数组是数组,是char类型的,两者可以互相转化;因为string类中有许多已经定义好的函数,直接使用会比用字符数组处理字符串方便很多。

2.StringBuilder

2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
答:StringBuilder可以直接进行字符串的修改,而不是创建新的对象,String则因为有不变性,每次修改字符串时都会产生新的对象,占用空间。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
答:StringBuilder的append(char[] str)是将char数组插入到StringBuilder对象后面;
StringBuilder内部使用数组存放字符;
在原字符串的后面添加char数组;

3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
答:当有一个引用被赋值时,系统会先搜索这个值是否已经在字符串中,若有则直接引用这个值,所以在这里str1和str2引用的对象是相同的,这段代码的输出为“true”;str3使用了new,所以即使它所引用的对象的内容与str1相同,新对象也不是在字符串池中,所以这段代码创建了两个字符串对象。

3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
答:因为引用有可能指向不同的对象,不同的对象就算值相同,所在位置也不一定一样;应该用函数equal比较。

4.Wrapper(包装类)

4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
答:这里使用了自动装箱,将100赋值给i的引用对象;
自动装箱、自动拆箱、赋值、拆箱再装箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
答:JAVA面向对象,但基本数据类型不是面向对象的,包装类可以让基本类型变成对象,方便编程。

5.实验总结

5.1 结对编程实践:
结对编程队友:周彪;刚刚开始学习java,两人的水平都不足,讨论经常是两个人都不懂该怎么做,结果还是一直在百度,这样反而比一个人查询的效率更低;互相交流意见确实可以引发各自的思考,但感觉在我们学java的初期,结对编程并不能达到1+1>2的程度。

5.2 PTA-1综合小测验
斐波那契数列使用循环语句逐个输出字符;
排序则使用arrays函数进行排序,输出时使用Arrays.toString可以用[]包裹;
搜索也是使用arrays类函数进行输出;getBirthDate则是用substring函数抽出身份证中的年月日。

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
sort1:用substring将身份证号中的年月日抽出,组装起来后用Collections.sort排序;
sort2:用年月日比较后输出原身份证号;
将升序函数换成降序函数;用substring抽出月份进行排序即可。

5.4 PTA-4动态数组
先构建二维数组,然后用for循环语句将乘法表输出,空格的问题当时在不同位置直接输入“空格”都是格式错误,后来询问得知要使用%-7s的输出方式。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
使用ArrayList的各个函数(add、get、remove等)解决题目问题;数组的长度是固定的,而ArrayList是动态数组,比较灵活。

3. 码云及PTA

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

3.2 截图题集“Java基本语法”PTA提交列表

3.3 使用老师发的jar程序统计每周的代码量

注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt

posted @ 2017-09-23 13:34  绫崎桂马  阅读(186)  评论(0)    收藏  举报