201621123048《Java程序设计》第二周学习总结
1. 本周学习总结
本周的重点是Java的数据类型分类,主要分为两大类即基本数据类型和引用数据类型。还学习了基本数据类型的表现形式,其中boolean是java特有的数据类型,与C语言的不同点是boolean只能表现为true和false。数据类型与包装类一一对应,其主要的作用是将数据类型进行下一步处理。本周还学习了很多String类的用法,String的特点是具有不变性。Java的引用也与C语言不同,主要区别是引用的地址发生了改变在运行过程中只会产生一个实参。本周还初步了解了Java中的三类数组的应用。
2. 书面作业
1. String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
答:String类实质是通过字符数组来保存字符串的。
1.2 分析其构造函数public String(char value[])
的作用?
答:该作用是通过字符数组搭建出字符串对象。
1.3 阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?(重点)
在使用public String replace(char oldChar, char newChar)
替换字符串时,是将新的字符串替换旧的字符串即运行中把oldChar换成newChar,但String变量并没有改变。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
String类可以和字符数组进行相互转换,虽然使用字符数组可以处理字符串但是它使用起来会浪费内存空间而且不方便,而使用String类就可以提高字符串的处理速度更方便我们对字符串进行更改。
2. StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
因为Sting的不可变性,当我们在修改字符串时,用它会产生新的的String对象,耗占空间和时间。相反StringBuilder则是直接对字符串进行修改节省了大量时间空间。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)
方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)
方法时,是如何实现添加字符的操作?
Ppend(char[ ] str)
的功能是有顺序的添加字符的StringBuilder对象中,其内部使用的是字符数组来存放字符。调用StringBuilder.append(” ”)
进行添加字符。
3. 字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
首先strl被赋值为hi,当str2再赋值为hi时,会进行字符串池的收索,当收索到相同的值时该值直接被调用,即strl1与strl2使用相同的地址的字符因此输出结果为true,而strl3则是新建的字符串所以这段代码创建了两个字符串。
3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
在基本数据类型的比较中只比较两个对象的内容而不考虑地址,相反对于引用类型即使两个对象的内容相同地址也可能是不同的,所以不能用==直接比较。比较他们可以使用equals。
4. Wrapper(包装类)
4.1 Integer i = 100;
//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100;
int y = x+1;
x++;
这一串命令中包含了些什么操作?
在Java语言中运行Integer I =100
时会进行自动的字符转换即自动装箱,Integer x =100;
int y = x+1;
x++
包含了自动装箱(Interger=x)、自动拆箱(int y = x+1)、先插再装箱(x++)。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
基本数据类型是不面向对象的,而恰恰Java是一种面向对象的语言,使用在基本数据类型转换等操作中使用包装类可以方便我们使用。包装类为我们实现了基本数据类型之间的转换。
5. 实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
队友:邓帅帅
本周首次尝试结对完成作业,总的来说感觉不错,应该有1+1大于2的效果,虽然每个人都有每个人的思路,但是另一个人往往可以提醒你看出编程出错的地方,本周的编程题还是很有难度的,所以结对的效果很不错。
5.2 PTA-1综合小测验
总体用switch函数列出四种功能:fib部分主要是用C语言类似的递归的方法写出斐波那契数列。Sort部分即建立字符串的数组并将题目所给的数字存入,调用Arrays.sort()
函数进行输出。getBirthDate部分使用substring截取按题目要求需要的字符串然后按格式输出。
5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
本题要求的sort1与综合小测验的其中一项要求类似即调用substring按题目要求格式输出并用Arrays进行排序即可,而sort2要求输出整个身份证号就比较复杂了,总的来说就是使用冒泡法,实现降序排序也是类似的只是改变冒泡法力的规则就好了。最后一问按上面截取的范围把年全部改成月就好了。
5.4 PTA-4动态数组
本题是二维数组的使用,利用getDynamicMatrix
函数创建符合题目的二维数组,然后利用循环语句将乘法表的信息储存在数组中输出即可。这题主要是输出格式的问题输出函数使用Arrays.deepToString
。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
主要还是根据文档来一步步写,因为是入门比较简单没什么好说的。ArrayList是动态数组,使用它可以动态增长,不仅使用方便而且节省内存空间。
3. 码云及PTA
3.1. 码云代码提交记录
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
周次 | 行数 | 新增行数 | 文件数 | 新增文件数 |
---|---|---|---|---|
2 | 289 | 289 | 11 | 11 |