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

1. 本周学习总结

  • 即使两个引用类型指向的数据相同,它们两个也不能用==相连。
  • 学会了一些String函数的用法。
  • 字符串池中若没有需要的字符串,则会新创建一个字符串常量放到字符串池中。

2. 书面作业

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

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

  • String是使用数组来储存字符串的。

1.2 分析其构造函数public String(char value[])的作用?

该函数的作用是通过char数组,生成String字符串对象,接口中的参数是一个char数组。

1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?

  • 这个方法返回 newChar 更换 oldChar 所有出现在此字符串中产生一个新的字符串。

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

  • String与字符数组二者可以互相转换。
  • String将所有的内存操作全部包装起来,使用的时候可以不用考虑字符串的长度,也不用自己申请和释放内存。

2、StringBuilder

2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

  • String具有不可变性,每修改一次字符串,就会申请新的内存空间,而原字符串的内存占用空间不会被清除,所以频繁地修改字符串,会占用大量的内存空间,因此,频繁修改字符串时,应该使用StringBuilder而不是String。

2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?

  • StringBuilder的append(char[] str)方法功能是将 char 数组参数的字符串表示形式追加到此序列。
  • StringBuilder内部使用字符串数组来存放字符。

按顺序将数组参数中的字符追加到此序列中。此字符将增加该参数的长度。

3、字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

  • 结果为true,这段代码创建了两个字符对象,先在字符串池中创建一个hi,让str1指向它,接着创建str2时,会在字符串池中搜索,若搜索到hi,就会直接让str2指向它,若未搜索到,才会新建一个hi,str3则是用new新建一个字符串对象。

3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?

  • 因为引用类型的变量名并不是直接指向它所对应的数据的,所以不能用==比较。
  • 用a1.equals(a2)可以比较两个变量的值是否相同(a1,a2均为变量)。

4、Wrapper(包装类)

4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?

  • Integer自动装箱,给i包装了一个int基本类型,所以可以直接给i赋值100,
  • (1)自动装箱,将int型转成Integer型
    (2)自动拆箱,将Integer型转成int型
    (3)先拆箱后装箱。

4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

5、实验总结

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2.1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3.5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。


  • 队友:江炳煌。
  • 我们在结对解决问题的时候,只要任何一个人有想法,就立马提出,然后两个人再讨论想法的可行性,我们在打代码的过程有交替的行为,但是并不频繁,因为每交换一次就要重新理解,比较麻烦。
  • 我同意1+1>2,但是我个人觉得两个人交替打代码的效率不是很高,可能是因为我比较喜欢先一个人打代码,然后在遇到不懂的问题时先查阅资料再询问同学,这样我的印象会比较深刻。

5.2 PTA-1综合小测验

  • 大部分都是细节上的问题,像fib只需要一个简单的递归就能解决,而sort输出需要有[],我不知道要如何解决这个问题,于是就询问了同学,才知道有个函数System.out.println(Arrays.toString(a));可以直接输出并附带[]

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

  • 这道题是PTA上第一题的小变体,我是将出生年月日依次比较,年相同则比较月,月相同则比较年,使用的是冒泡法进行排序。sort2降序排序的话只需要反过来用冒泡排序法即可,若是要按照出生月份排序的话可以用a[i].subString(10,12)提取出月份,然后比较排序。

3. 码云及PTA

3.1. 码云代码提交记录

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

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

  • 不知道是什么原因,我的程序无法打开,所以统计不了代码量。

posted on 2017-09-23 20:07  Eshy  阅读(134)  评论(1编辑  收藏  举报

导航