第二周Java作业
Week02-Java基本语法与类库
1.本周学习总结
本周主要学习了Java的数据类型,有两种,一种基本类型和c差不多,还有一种引用数据类型。Java特有的数据类型Boolean,取值不是0和-1,而是true和false。还有引用数据类型,它的变量指向数据对象的地址。类似于C语言中的指针。还学习了引用类型null、字符串类型string、与equals可以比较a与b指向的对象内容是否相同、字符串常量池和string的不变性。还知道了频繁的对字符串进行修改,可以使用Stringbuild。
2.书面作业
1.String-使用Eclipse关联jdk源代码
1.1查看String对象的源代码(截图),分析String使用什么来存储字符串?
截图:

1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容。
1.2分析其构造函数public String(char value[])的作用?
通过char数组,生成String字符串对象
1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。 如 果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,用来表示与此 String 对象表示的字符序列相等的字符序列,除了每个出现的 oldChar 都被一个 newChar 替换之外。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
字符数组是数组,字符数组是char类型的,字符串是String类型的,还用String因为String类本身提供了一个将字符数组作为参数的构造函数,所以更简单。
2.StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
因为String具有不可变性,每一次修改字符串都会生成新的对象,增加内存,降低效率。使用StringBuilder修改字符串时,仅仅只是生成了一个对象,能大大的提高效率。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
- 追加这个序列的char数组参数的子数组的字符串表示形式。
- StringBuilder内部使用动态数组来存放数组。
- 字符的字符数组str中,在指数偏移量开始,该序列的内容按顺序追加。这个序列的长度增加len值。
3.字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
输出结果是:true
- str1和str2指向同一个地址,str3建立了一个新的对象,str1和str2是相等的,所以结果是true。
3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢? - "=="是用来比较两个变量的存放地址而equals是用来比较两个对象的内容,引用类型中地址不相同,是比较内容的。
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 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:
1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。

- 队友姓名:陈星源
- 因为遇到了困难,就找到了星源进行讨论,并上网查阅了一些资料,对03-身份证排序这道题有了一定的认识和了解。
- 感受就是一个人有时候会静静思考,而两个人时,每当遇到困难时就会想问另外一个人这道题该怎么做,同样两个人会有不一样的想法,会给彼此一些启迪。总之各有利弊吧!
5.2 PTA-1综合小测验
这题虽然上课讲过一部分,可是自己编译一直错误。
5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
将出生年月日截取出来进行冒泡排序,按从小到大输出相应的出生日期和身份证号码。降序和升序刚刚相反。
5.4 PTA-4动态数组
这个有点难,做不出来,好难写。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
数组是定长的,Arraylist是不定长的,所以对数据量多少确定用数组,不确定用Arraylist。
3. 码云及PTA
3.1. 码云代码提交记录

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

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

浙公网安备 33010602011771号