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

1.本周学习总结

答:
1.String是字符串,String使用了字符串常量池,避免了占用大量的存储空间。
2.当我们用“=”对变量赋值是实际上是赋给变量指向对象的引用,当我们对该变量置新引用时,原来对象仍然存在,要注意用法不要浪费存储空间。
3.JAVA面向对象,但基本数据类型不是面向对象的,包装类可以让基本类型变成对象。

2.书面作业

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

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

答: 用字符数组来存储字符串
1.2.分析其构造函数public String(char value[])的作用?
答: 通过char数组,生成String字符串对象。
1.3.阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

答:我们创建一个string字符串,实际上是创建一个这个字符串的引用,当改变这个字符串引用时,只是将引用指向新内容,不改变原来内容,原来的内容还是存在于其空间中。
1.4.简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
答:String是char型数组的封装,char型数组是String对象的具体实现方式。String类中有各种本来有的方法,不需要我们再去写,这是特别方便的,另外字符串中的值一般不能直接更改。

2.StringBuilder

2.1.结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
答: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);
答:
创建字符串str1时,实际上是创建一个引用,指向该字符串“hi”,str2的引用同样指向同一个内容,并不生成新对象。而str3是 new出来的一个新对象,所以共创造2个对象,输出结果是true。
3.2.重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String,Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
答:
java中我们对变量用“=”赋值,实际上是让变量等于指向对象的引用,使用==进行判断时是判断二者的引用是否相同,而不是判断值;
可以用equal()比较值。

4.Wrapper(包装类)

4.1.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
答:Integer是int的包装类,因为java有自动装箱,把int类型用Integer包装;
Integer x = 100自动装箱,x++是自动拆箱操作。
4.2.Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?.
答: 包装类整合了基本数据类型与诸多功能函数,为我们对基本数据类型的操作提供了极大便利,需要做什么操作时只需要调出函数即可完成

Java中基本数据类型和包装器类型的关系

5.实验总结

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

答:
队友:陈瑀,我下铺,经常一起讨论编程问题,不过以前都是各自在打,遇到困惑再讨论,这是第一次一起做一道题,图为我们在做PTA7-2身份证排序。
体会:我觉得编程不适合2个人坐一起打一期,因为效率会比较低,速度会慢。不过可以互相交流编程的思路也很不错。其实可以一题分为几个部分模块,我们一人负责一部分,自己做好负责的部分,然后再一起对整道题的个人见解进行交流,这也是合作的体现。

5.2.PTA-1综合小测验
答:
本题需要实现四个指令,所以最好是用switch实现命令的判断。用Scanner读取字符或数字,Integer.parseInt将字符数组转化为整形数组。search模块中庸Arrays.binarySearch做到数组中查询元素。用string.substring对字符串部分进行拼接。
5.3.PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
答:用switch实现sort1和sort2命令的判断.sort1模块中我将身份证存入字符串数组,再把每个元素的年月日存入新的字符串数组,然后用冒泡排序法将值小的往前排,最后按升序输出。sort2中前面如sort1把每个元素的年月日存入新的字符串数组,后转成整形数组,还有一些细节思路比较奇怪,最后嵌套循环比较输出。

5.4.PTA-4动态数组
答:strs[i][j]=(i+1)+""+(j+1)+"="+(i+1)(j+1);放入字符串元素,打印的时候要注意句尾不加空格,应用If语句来判断是不是最后一个的输出。还需要注意打印完乘法口诀表后使用Arrays.deepToString打印二维数组中的内容。每一项表达式之间共有包含7个字符,所以应采用%-7s的形式打印输出。
5.5.(重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
如图

答:ArrayList可动态改变数组大小,而且ArrayList类中包含了很多方法,可直接调用,较为方便。

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

7.选做(难):package与javac、 java、 -classpath、 -d与Eclipse

7.1.尝试用命令行进行编译并运行,截图.在edu.jmu包中编写Main类,其中掉了com.ibm.StringUtil的foo1方法
7.2.将生成的StringUtil.class放到d:\lib下正确的目录结构下,将Main.class放到d:\test下正确的目录结构,尝试在命令行下运行,并截图。
7.3.Eclipse中自己编写的源代码放在哪个目录、class文件放在哪个目录(给出绝对目录)?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?

3.码云及PTA

3.1.码云代码提交记录

GIT

3.2.截图PTA题集“Java基本语法”完成情况图


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

答:

因为我修改作业,这个jar程序不会把我代码计算到第一周去而是计算到第四周去。

4.小任务(加分)

posted on 2017-09-24 21:48  阿哈·  阅读(212)  评论(3编辑  收藏  举报