201621123021 《Java程序设计》第2周学习总结

201621123021《JAVA程序设计》第二周学习总结

1. 本周学习总结

  • 本周了解了JAVA的基本数据类型,及其与C语言数据类型之间的差异。
  • 知道了JAVA如何对数组进行创建和运用。
  • 了解了JAVA的包装类,如自动装箱和自动拆箱。
  • 了解了JAVA作为面向对象的语言,其引用对象为常量池。
  • 知道了String类的一些运用。

2. 书面作业

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

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

public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; private int hash; private static final long serialVersionUID = -6849794470754667710L; private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; public String() { this.value = "".value; }由JAVA源代码的这一段可知,String类使用字符数组来存储字符串。

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

  • char value[]是数组的声明,此构造函数的作用是将char数组转化成string类。

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

  • 函数中oldchar和newchar本身的字符未发生改变,而是新的字符串引用发生了改变。

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

  • String类是字符数组的延伸,JAVA的源码中将字符数组转化成字符串以实现新的数据类型String。
  • String是对字符数组的封装,通过这样使得JAVA在字符串中运用更加简单方便,并且可以直接使用封装后的函数。

2.StringBuilder

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

  • string若需要修改字符串需将在字符串常量池中创建新的字符串,以此来达到引用,而stringbuilder可以将一个字符串对象进行修改,从而在频繁的修改字符串时不需要浪费额外的内存空间来存放新的字符串。
  • 在PTA-2中我们要实现字符串的拼接可以需要频繁的修改字符串,而此时就需要使用StringBuilder而不是String.

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

  • 功能是在字符串数组的后面插入指定内容。
  • StringBuilder通过字符串数组来存放字符。
  • 字符串追加指定内容来添加字符。

3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

  • 最终输出结果为"true",因为str1和str2引用是在字符串常量池中同一个对象"hi"。
  • 这段代码创建了2个字符串对象,分别是"hi",和str3中声明创建新的字符串对象被str3所引用。

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

  • 因为基本类型用“==”可以比较他们的对象是否相等,而对于引用类型用“==”比较的是引用的地址是否相等,两者这件比较的对象不一样。
  • 比较引用类型中引用对象的值,可以使用equal函数进行比较。

3.Wrapper(包装类)

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

  • 将100赋值给i,可以实现引用类型的自动装箱可以代码结构更加简单。
  • 包涵了数据类型的自动装箱和自动拆箱操作。

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

  • 包装类型可以实现基本数据类型要实现时比较繁琐的操作,可以使数据的使用变得简单。
  • 包装类型的好处是可以实现基本类型与其的转换,也可以是基本数据类型难于实现的数据在包装类中快速实现。

5.实验总结

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

5.2 PTA-1综合小测验

  • 本实验使我对于String类中StringBuilder得以在一定程度内使用,StringBuiider能够在String引用类型中,对引用对象进行改变,避免了不断创建新的字符串的尴尬局面。

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

  • 本实验我是用JAVA中的函数substring在数字取所要比较数的范围,然后再用函数compareTo进行比较,运用冒泡排序法进行排序。
  • 若要将数值进行降序处理,可将改变将冒泡排序法的值大小比较变化下,对出生月份进行排序运用函数substring是身份证的取值范围发生改变。

5.4 PTA-4动态数组

  • 本实验要实现动态数组需要先创建一个二维数组,对于数组中未使用的空间使用NULL,来表示此位置为空,对于非空位置,实现输出。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?

  • 本实验使我初步了解了ArrayList的使用,能够在一定的成都上使用动态数组。
  • 数组中运用ArrayList可以实现对内存空间进行自由分配,实现对空间的合理分配。

3. 码云及PTA

3.1. 码云代码提交记录

 

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

 

 

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

行数新增行数文件数新增文件数
324 324 46 46
posted @ 2017-09-23 17:15  参通  阅读(170)  评论(1编辑  收藏  举报