1. 本周学习总结
Java中的引用类型,String类,包装类和数组。
包装类中的自动装箱,自动拆箱。
Integer常量池的概念。
动态数组ArrayList。add、remove、get、size、isEmpty、contains等的用法。
2. 书面作业
1.String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
String是通过char数组来保存字符串的
1.2分析其构造函数public String(char value[])的作用?
该函数的作用是通过char数组生成String字符串对象。
1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
replace方法并不能改变字符串本身的,只是replace方法能返回一个处理后的新的字符串。取原字符串值取出放入内存中,替换生成一个新的字符串,返回新字符串,从而得到了两个字符串
1.4简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
字符串是类而字符数组是数组,字符数组是char类型的,字符串是String类型的。String处理字符串的速度更快。
2.StringBuilder
2.1结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
因为String频繁修改字符串时,每一次修改都要生成新的字符串,这会浪费内存空间和时间。而使用StringBuilder中的中的方法修改字符串,会直接对原字符串进行修改,从而节省了空间和时间。因此在频繁修改字符串时,应该使用StringBuilder。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
append(char[] str)的方法是把指定字符数组按顺序添加到StringBuilder的对象中。在它内部使用char[]数组来存放字符,它会在原字符串末端添加传入的数组。
3.字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
输出结果为“true”;创建了两个对象。str1赋值为“hi”时,然后将“hi”存入字符串池中;str2先判断字符串池中是否已经有了“hi”,如果有了直接引用不再建新的对象;而str3使用了new String所以又创建了一个新的对象。
3.2重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
””比较的是两个字符串的内存地址是否相同不是比较两个字符串内容是否相同,因此不能用””比较。
要比较它们的值是否相等,应该使用equals()方法。
4.Wrapper(包装类)
4.1Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
Integer i = 100;这句代码编译时会对其自动装箱。
Integer x = 100; int y = x+1;x++;这一串命令包含了自动装箱,自动拆箱,拆箱和再装箱。
4.2Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
java是面向对象的编程语言,基本类型不具备对象性质。为了让他具有对象性质则需要包装类。
包装类的好处:
①有时候一个函数需要传递一个Object变量 而你想传递int类型的进去显然不行,这就要用到包装类。
②集合不允许存放基本类型数据,只能存放包装类型
③通过包装类,String可以和基本类型之间相互转换
--源自《Mr-Xi的博客》
5.实验总结
5.1结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
队友:胡宇昊
这个方式有它一定的优点,我们互相可以交流彼此的想法和思路加快完成编程,但有时候会产生意见分歧和思路完全不一样导致浪费时间,有利有弊吧。总体还是比较不错的。
5.2PTA-1综合小测验
fib用递归写出斐波那契数列实现函数;sort的值存入数组中,Arrays.sort()输出;最后取日期用str.substring()。
5.3PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
首先sort1提取出来身份证中的年月日和上边那道题有点类似,但是多了提取出来之后的升序排序.而sort2则难了挺多,开始自己完全找不到头脑。问了同学之后才知道用冒泡的方法可以解决这道题。
5.4PTA-4动态数组
这道题用二维数组来解决,但是出现了格式错误。在网上找了很多类似的例子之后发现最后要用%-7s的格式才正确。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
在做题时熟练运用ArrayList的用法就能很快的完成题目。因为ArrayList不用考虑数组的大小它是动态的用起来比较方便。
6选做:公交卡里应该还有多少钱?请分析原因
前几天在qq新闻推送中看到过,现在又去翻了一下解释。应该是欠费0.2元。
卡里的余额是int整型,占4个字节,范围是2^32=4294967296。 在有符号的情况下是-21474836482147483648;在无符号的情况下是04294967296。因为最小单位是分,即0.01元所以对人民币设计为-21474836.48~21474836.48.欠费在有符号的情况下是-20.在无符号下就溢出了,值为4294967296-20=4294967276即42949672.76。
3.码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表