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

1. 本周学习总结

  • 学会了Java里面里面的引用类型,包装类和数组
  • 什么是自动拆箱,自动装箱,了解了数组的属性,如一维数组和多维数组以及ArrayList
  • 学会使用码云管理代码,将本地代码上传至码云,将码云上的项目保存至本地。

2.书面作业

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

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


String对象的设计思路:String使用了字符数组来存储字符串,当你改变String类型值的变量时地址可能发生改变,若使用StringBuilder可以避免。

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

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

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

Java String replace()函数是要返回一个新的字符串,用newChar替换此字符串的中所出现的oldChar,不可变性体现在于在替换过程中,是先新建一个字符串,不是在原本的字符串上操作的,对原来的数值的值不受影响。

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

字符串是类,是String类型的,字符数组是数组,是char型的,两者可相互转化,使用String具有不可变性,在运行过程中不会导致原本的数值发生改变,提高可靠性。

2. StringBuilder

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

使用String时每一次对字符串进行操作时需要新建空间,然后再删除原来的字符串,影响效率,并占用空间,而StringBuilder是在字符串的末尾进行操作,相对 效率提高很多。

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

  • 功能: StringBuffer.append(char[] str) 方法追加char数组,即str参数为这个序列的字符串表示形式。数组参数的字符追加的顺序到这个序列的内容。这个序列以该参数的长度增加它的长度。
  • 使用字符串数组来存放
  • 使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列

3. 字符串与字符串池

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

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

根据代码可知,创建了两个字符串对象,最后输出的结果为“true”。

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

如果使用了== 进行比较,在比较字符串的值时容易出错,因为==是用于比较两个变量的地址是否相同,可以使用str.equals()来判断两个字符串是否相等。

4.Wrapper(包装类)

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

  • 因为在Integer i=100中即是Integer i=new Integer(100),JDK调用函数将100赋值给i;
  • 包含了Integer x = 100;自动拆箱,x++是先拆箱后装箱。

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

  • 更加体现了面向对象的特点,有人说java不是纯面向对象语言,纯度只有百分之九十,就是因为java中仍然使用了基本数据类型和static。而包装类的出现,则更好的体现了面向对象的设计理念。
  • 假如我有一个方法,接收一个Object 类型的参数,那么我们的基本数据类型就不可以做为参数传入这个方法,比如我们最常用的集合类,这些集合类中的元素是不是都是对象啊?要是没有包装类,那么基本数据类型就不可以保存在集合中,仍然需要我们自己写一个类,将这些数据做为这个类的成员变量封装起来,天!太繁琐了。而包装类的出现就成了必然。
  • 在jdk1.5之后,出现了自动拆箱和自动装箱,大大的缩减了繁琐的代码,更加方便了成员的编程.(参考百度知道的回答)

5.实验总结

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

我的队友是苏志颖同学,通过这次编写,让我感受到两个人确实能够达到1+1>的效果,两个一同编写,旁边观看的同学能能够更好的看出编写同学的错误,后面一起更正,遇到不会的通过讨论的形式更加容易记忆深刻,两个的思路有交织,可以提高编程的水平。

5.2 PTA-1综合小测验

该题是通过输入端口的不同对程序进行操作

  • 输入fib执行打印斐波那契数列操作,直接调用fib函数把输入的数转化成斐波那契数列
  • 输入sort进行排序操作,先把输入的字符串型转化成整型,用
    Arrays.sort排序函数可以对数组进行排序
  • 输入search,把输入的数字转换成int型,查找其位置

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

主要思路:通过冒泡法进行排序,截取出年月日后换成数值放到数值中,比较大小再交换。

5.4 PTA-4动态数组

主要思路:strList.add()把字符输入到动态数组中;strList.contains()判断是否含有指定字符;strList.get()输出指定下标字符
ArrayList相对数组来说操作比较灵活节省空间,适应更多情况。

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

参考他人博客:可能是浮点数二进制存储出现问题,可能出现负数,然后补码溢出,或者机器出现故障。4294967276 转成 16进制 是[FFFFFFEC],所以是-0.20。

3.码云及PTA

3.1. 码云代码提交记录

我的git在使用过程中出现了错误,还未解决,之能添加代码片段,等我解决后再回来进行编辑.

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

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

周次 总代码量 新增代码量 总文件数 新增文件数
2 280 280 5 5
posted @ 2017-09-23 20:56  DansLv  阅读(237)  评论(1编辑  收藏  举报