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

1.本周学习总结

  • 最大一个收获是学会用jdk文档来查询。
  • 能弄明白对象的概念了。
  • 能够区分String和StringBuilder,并学会一些用法。
  • 还是要多编程编程编程。
  • 创建一个对象时,应申请空间再初始化。

2.书面作业

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

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

  • String使用在堆中分配的一块区域来存储字符串。

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

  • 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

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

  • String的对象不可变,当String对象指向的内容初始化后,内容便不能再修改,只能再重新生成新的对象。举个例子,String str="abc";str="123";abc字符串对象并未改变,只是重新生成新字符串123。

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

  • 字符数组是char[],而String则是封装了的字符数组。
  • String有字符数组没有的优点,String可以在字符串常量池创建对象,如果已经有了的话就不创建直接复用,节省空间。

2.StringBuilder

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

  • 使用String对字符串进行修改操作时,会生成新的对象(String的不可变性),如果进行大量修改的话,会生成很多无用的对象,浪费空间,很大程度降低了效率。而使用StringBuilder类则是对其对象本身进行操作,不会生成多余的对象,因此频繁修改字符串的情况应使用StringBuilder。

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

  • 功能:将 char 数组参数的字符串表示形式追加到此序列。

  • 使用字符串数组
  • 先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。

3.字符串与字符串池

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

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

  • 该程序输出结果为true。并创建了两个字符串对象。
  • 原因如下:因为是直接使用双引号创建字符串,所以是在字符串常量池创建的对象,第一个语句说明创建了str1指向hi,因为在常量池已创建str1指向hi这个对象,所以str2直接复用。第二句str3是在字符串常量池外创建对象。所以一共创建了两个对象。第三句是问str1和str2对象指向的字符串地址是否相同,因为同时在常量池指向hi,所以相等,输出true。

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

  • 用于比较两个引用类型变量存放的引用是否相等,而引用类型代码使用new创建新对象,两个变量分别指向新创建的字符串对象,他们的值相等但是引用不同,所以不能用
  • 可以用equals()方法。

4.Wrapper(包装类)

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

  • 当i的取值为-128~127时,会调用方法Integer.valueOf(int i)。实际上Integer i = 100等于Integer i = new Integer(100)。这样就可以把100赋给i。
  • 自动装箱;自动拆箱。

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

  • Java是面向对象的,但基本类型并不具备对象的性质,包装类是为了使基本类型有对象的特征。
  • 包装类可以吧基本数据类型包装起来,使他具备对象性质,可以添加属性和方法,方便更丰富的操作。

5.实验总结

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

  • a.队友:叶澜浈。结对过程:我俩决定先做一题,她先说完她的思路,然后我也说完我的,她先开始写前面的Scanner,我再接着写下去两人轮流写,没有规定要几分钟,写到后面就是两个人谁有思路谁去写。
  • 结对的好处是可以思想碰撞,刚好一个点卡住,她的思路可以帮我解开,但是对自己编程水平还是没什么帮助,主要还是自己平时要多练多写。

5.2 PTA-1综合小测验

  • 斐波那契数列用采用递归的写法,方法和c语言的差不多几乎一样。
  • 用switch先写下四个选择,然后分别写函数。
  • 注意+号的使用。

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

  • 主要用到String类,用方法.substring()方法返回一个新的字符串,它是此字符串的一个子字符串。即身份证中的年月日。

5.4 PTA-4动态数组

  • 使用数组存储乘法表,注意下标从0开始,所以数组内的二维存放值应该为10。

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

  • 这题比较基础,主要是入门的一些操作,查一查jdk文档了解这些基本的还是比较快能写出来。
  • ArrayList可以在任意位置插入和删除项,比较方便。

6.选做:公交卡里应该还有多少钱?请分析原因

  • 曾经在知乎上看过这个新闻的具体分析。我又重新上网搜索了。具体参考:http://news.163.com/13/0320/05/8QCUNHI600014AED.html
  • 4294967276 =(16进制的)FFFFFFFC,其实是欠0.02元。程序员处理时用了无符号整型,没考虑到负数的情况。

3.码云及PTA

3.1 码云代码提交记录。在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

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

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

行数 新增行数 文件数 新增文件数
413 413 13 13

posted on 2017-09-20 20:55  球球滚吧hhh  阅读(169)  评论(1)    收藏  举报

导航