201621123033 《Java程序设计》第2周学习总结
1. 本周学习总结
·学习了String类的特点,以及其与字符数组的关系等等。
·常量池的相关概念。
·包装类的特点。
2. 书面作业
1. String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?

如图所示,String实际上是使用char[]来存储字符串。
1.2 分析其构造函数public String(char value[])的作用?
查阅JDK文档
public String(char[] value)
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。该字符数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
参数:
value - 字符串的初始值
将当前字符数组中的字符放入新创建的字符串中,但该字符数组依旧存在。
1.3 阅读public String replace(char oldChar, charnewChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
if (i < len) { //申请一个和原来字符数组一样大小的buf数组。 char buf[] = new char[len];
在该函数中是先创建了一个新的字符串数组,然后将字符替换并复制到新数组后,将构造的新字符串对象返回。所以实质是创建了一个新的String对象,而不是在原字符串中更改。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
String本质上是使用字符数组存储字符串;String创建对象后是不可变的,字符数组可以改变。直接赋值定义一个String对象时,会将改字符串入字符串常量池,等下一次再定义相同的String对象时就不会再开辟一个新的空间,节省空间,效率高。
2. StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
如果使用String的话,因为String的不可变性,每修改一次字符串,就会创建新的String对象,产生大量的String对象,占用大量空间。StringBuilder是将字符串追加或插入到字符串生成器中。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
功能:将 char 数组参数的字符串表示形式追加到此序列。
StringBuilder内部使用字符数组来存放字符。它是通过将字符参数转化为字符数组添加到原序列后实现添加字符的操作。
该方法的最终效果与以下操作过程的效果相同:先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。
3. 字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
输出结果:true,创建了两个字符串对象。
解释:直接赋值定义str1,该字符串会存入字符串池中,当str2被直接赋值定义后,字符串池中已有该字符串,所以不再重复创建新的对象。而str3是采用new String()的方式定义的,所以新创建了一个字符串对象。
3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
因为==比较的是是否为同一个对象,而不是比较两个值。应该用equals方法,如String str=new String("hi");str.equals("hi");不区分大小写进行比较:"abc".equalsIgnoreCase("ABC");
4. Wrapper(包装类)
4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
因为包装类可自动装箱、拆箱。
Integer x = 100自动装箱,将基本数据类型100转换为Integer类型;int y = x+1自动拆箱,将Integer类型x转换为基本数据类型y;x++则是先拆箱再装箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
包装类可以实现基本数据类型之间、基本数据类型和String之间的转换,而且可以将基本数据类型封装成对象,毕竟Java是面向对象的语言,所以许多地方都是需要用对象。
5. 实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
结对对象:秦玉
就近选择舍友作为合作方,步骤1、2进行得还是比较顺利的,但从步骤3开始,两人讨论过程中发现两个人思路、编程习惯大相径庭,确实不太适合一起编程,所以我们决定用各自的方法进行编程,结束后再做交流,互相吸取对方方法的优点。个人认为,就这次的体验,觉得确实没有产生1+1>2的效果,不过各自编程后进行交流总结的这个过程倒是觉得有所收益,确实开拓了编程思路。
5.2 PTA-1综合小测验
该题中,斐波那契函数部分基本和以前用C语言编写的差不多,就不多说了,注意输入的n可以小于3;sort部分使用split()函数去掉空格,再自己编写函数将字符串数组转换成整型数组,然后使用Arrays.sort()进行排序,最后使用Arrays.toString输出即可;search部分会使用Arrays.binarySearch(int[] a, int key)即可;getBirthDate部分使用substring()方法,要注意参数的选取。
5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
sort1部分类似与综合小测验中的截取年月日的部分,只不过再对其进行排序,使用Arrays.sort()方法即可;sort2的话跟以前写C语言的时候的一些题目差不多,可以利用冒泡法进行排序,如果要降序的话就把冒泡法里的判断条件更改一下就行了。
5.4 PTA-4动态数组
这题的话比较基础,注意一下输出格式就行了。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
这题其实也不难,题目里已经列好了操作的步骤,只要把这些步骤转化成代码即可。用JDK文档查询ArrayList类的相关方法,根据步骤要求使用这些方法就能编写出来。比较值得注意的就是步骤12,一开始将strlist里的元素转化成字符数组和str进行比较,出现空指针的错误,反复尝试后发现其实只要将每个元素转换成字符串然后用indexOf()方法比较即可orz想得太复杂了。
使用ArrayList可以灵活改变容量长度,有点像C中的分配动态空间。
3. 码云及PTA
3.1. 码云代码提交记录

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


3.3 使用老师发的jar程序统计每周的代码量
| 行数 | 新增行数 | 文件数 | 新增文件数 |
|---|---|---|---|
| 247 | 247 | 76 | 76 |
201621123033 《Java程序设计》第2周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 17、SpringBoot------整合dubbo
SpringBoot整合Dubbo+Zookeaper 1.安装运行zookeeper (1)下载zookeeper 官网:http://zookeeper.apache.org/ (2)解压缩 (3 ...
- java乱码问题
我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...
- 深入理解java虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
- 判断移动端和pc端最简单的方法
<!DOCTYPE html><html><head> <title></title> <script type="text ...
- python的运行过程剖析·编程语言分类
总结: 编程语言的分类 编译型: 说明:与汇编语言类似,都有一个编译程序将源代码编译成硬件可执行的二进制代码 特点:执行速度快.同等情况下对系统要求低,适合于开发大型应用程序.数据库系统.操作系统等 ...
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- Educational Codeforces Round 42D. Merge Equals(STL)
D. Merge Equals time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- [Uva11178]Morley's Theorem(计算几何)
Description 题目链接 Solution 计算几何入门题 只要求出三角形DEF的一个点就能推出其他两个点 把一条边往内旋转a/3度得到一条射线,再做一条交点就是了 Code #include ...
- 2015 acm taipei L-Reward the Troop(uvalive 7465)(找规律)
原题链接 就大概说的是一个将军要给部下发勋章,他的部下以和别人不一样的勋章为荣,但是他没这么多钱,所以问你最少要多少钱 要求是每个人的上司是他的上两级,他的下两级是他的部下,每个人的勋章不能和他的上司 ...
- 翻译 | 卷积码的维特比(Viterbi)译码
对维特比译码的接触很早就开始了,也想过要写一篇总结性的文章,但无奈心中一直有几个疑团没能得到合理的解答.比如什么时候开始进行回溯译码比较合适?维特比译码的性能相比分组码等其他编码的译码性能究竟好在哪里 ...