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周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. js判断移动端还是PC端

    function isMobile(){ var sUserAgent= navigator.userAgent.toLowerCase(), bIsIpad= sUserAgent.match(/i ...

  2. override与重载的区别

    override与重载的区别override 与重载的区别,重载是方法的名称相同.参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写.

  3. 【PE】手动给PE文件添加一段代码MessageBoxA

    源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ...

  4. Java分享笔记:File类中常用方法的介绍

    java.io包下的File类用于描述和创建一个文件或文件夹对象,只能对文件或文件夹做一些简单操作,不能修改文件的内容,功能比较有限.下面是对于File类中常用方法的程序演示. [1] 演示程序一 p ...

  5. CentOS 系统 Docker 的命令大全

    本文记录 CentOS 系统 Docker 的命令大全 命令 docker ps 显示运行中的容器 docker ps -a 显示所有容器 docker start 容器名称 启动容器 docker ...

  6. python数据类型的转换

  7. js表格打印自动分页demo

    本文翻译自:How Does setState Know What to Do? 原作者:Dan Abramov 如果有任何版权问题,请联系shuirong1997@icloud.com 当你在组件中 ...

  8. [Bzoj4408]神秘数(主席树)

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数. 例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...

  9. SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】

    一.简介 Spring MVC支持一个通用的多路上传解析器CommonsMultipartResolver,在Spring的配置文件中对CommonsMultipartResolver Bean进行配 ...

  10. PHP.13-日历类实现

    日历类实现 1.输出星期 calendar.class.php <?php class Calendar{ function out(){//输出表格 echo '<table align ...