201621123041java程序设计第二周学习总结

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

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

  • String储存着字符串的内存地址,学过C语言的我们可以把它理解成指针。
  • String使用字符数组来存储字符串。
  • 详细可参考String

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

  • 此题我查看String时发现其源代码为this.value=Arrays.copyOf(value,calue.length);其作用为返回被复制后的数组,参数是数组和被复制的长度。

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

  • 我们平时所谓的变量实际是指内存地址不变,而数值可变。String具有不可变性,我们平时修改的并不是数据,而是修改指向的内存地址,所以我们说String具有不可变性。

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

  • 首先,String是一个类,而字符数组是数组;第二,String具有不可变性,无法修改内容,字符数组可以修改内容;
    使用String因为有常量池的缘故,所以比较节省空间。而且String也有许多现成的函数,比较方便。

2.StringBuilder

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

  • String具有不可变性,而且String的长度无法改变,但是StringBuilder的长度却可以改变,还有String因为其不可变性,在处理很多数据时就会显现它的弊端,会对java的编译和运行造成阻碍。

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

  • append(char[] str)方法功能是在原有的字符串后添加新的字符串。StringBuilder内部用字符串数组来存放。
    调用StringBuilder的append(char[] str)方法时,系统会检测原来字符串的长度是否足够,若不够,则增加长度之后再增添字符,反之则直接添加。

3.字符串与字符串池

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

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

  • 输出的结果为“true”;这段代码创建了2个对象。首先,程序在字符串的池子里寻找有没有“hi”这个字符串,由于执行String str1 = “hi”所以新建一个对象,第二次执行str2 = “hi”,在字符串池中直接引用,第三次执行String str3 = new String(str1)使用new,肯定是要新建一个对象,所以一共创建了2个对象。

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

  • 是用来比较变量的值是否相等,当对象类型是基本数据类型时,我们可以直接使用来比较,但是,如果对象类型不是基本类型,那么比较的就是内存地址,不同的内存地址,其中所储存的值可能是相同的,而相同的储存地址,存储的值可能不同,所以引用类型不能使用==来判断两数的值是否相同。我们需要用equals来比较,equals是用来比较地址的。

4.Wrapper(包装类)

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

  • 之所以能够将100赋值给i,是因为使用了Java中的主动装箱。这一串命令中包含了自动装箱,自动拆箱,自动装箱。

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

  • 可以把基本数据和字符串之间进行字符转换,可以降低错误率,可以把取值范围变大。包装类能体现出Java面向对象;包装类可以实对现代码的简化,方便我们编译和运行。

5.实验总结

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

  • 我的结对对象是罗志凯,我主要是在我不懂的时候我们可以互相探讨,在做动态数组的时候,就是他给我输出的建议我才能完成这一道题,在身份证排序这道题,我们一起讨论了很久,如何把int型数组输出成String型数组。结对确实能得到1+1>2的效果,但是很消耗时间,不过付出是有收获的。

5.2 PTA-1综合小测验

  • 本题主要是在search函数卡了很久,主要是看不懂题目想要表达什么,最后问了同学,才得以解决。getBirthDate程序相比于第二题身份证排序,实在是简单了很多,sort主要是字符串数组转化成int型数组花了很多时间。

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

  • 这一题实在是太难!!!思考了很多思路,主要是先将输入的字符串数组转换成int型数组,比较大小,最后再将int型数组转换回字符串,在其中添加上‘-’。本题最开始的疑问就是输入三组数据,最后却只能处理一组数据,最后用数组来解决这方面的问题。

5.4 PTA-4动态数组

  • 本题的重点就是如何构造一个动态数组,使用String[][] strs = new String[n][];来完成。以及打印的时候要用%-7s,还有打印数组的函数Arrays.deepToString(str)

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

  • ArrayList比起数组更容易改变已经确定的数组中的元素。能够更灵活的控制数组。

3. 码云及PTA

3.1. 码云代码提交记录

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

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

周次 总代码量 新增代码量 总文件数 新增文件数
2 328 328 11 11
原文地址:https://www.cnblogs.com/l873253814/p/7580753.html