201621123037《Java程序设计》第二周学习总结
#Week02-Java基本语法与类库
1. 本周学习总结
- 关键词:
常量池、对象、null、不可变性、string对象拼接、字符串池
- 关键概念之间的联系:Java中有常量池,超出常量池以外的就会新开辟内存空间。如String x="abc";x不是存放"abc",而是指向它的对象。比较特殊的null这个在Java中不等同于0,代表没有值。Java中String类具有不可变性,如果不停地进行字符拼接来修改字符串时,每次更改后的字符串是一个新的面向对象,而原来的字符串不会消失仍占用内存空间(系统可以定时清除占用空间),所以用String来频繁修改字符串时会占用大量空间,故当字符拼接操作量大的时候,则应运用StringBuilder来进行拼接。被“”包裹起来的字符串字面常亮会先在字符串常量池中进行查找,如果有则不创建。
2. 书面作业
1.String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
答:String使用栈
存放变量,但对象本身不存放在栈中,而是存放在堆
或者常量池
中(字符串常量对象存也放在常量池中)。其中的堆使用new得出的对象,常量池是在堆中开辟的一块区域存放基本常量。String用char[]数组存储字符串,不过没办法动态增加数组长度。
1.2 分析其构造函数public String(char value[])的作用?
答:函数输入的参数为字符数组类型,通过函数内的运算之后,输出返回值,返回值类型为字符串类型。
1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
public String replace(char oldChar, char newChar)方法的代码如下:
答:由于String的不可变性,字符串拼接的话将会占用大量内存空间。所以代码中创建和原来字符数组一样大小的buf数组,改成对数组的改变。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
答:String初始化创建的字符串常量被定义为只读,也就是说没办法对定义后的字符串进行修改;而字符串数组存放的是若干个元素,是可以对单个字符进行修改的。在大部分情况下String和字符数组可以互换使用,但是若要修改字符元素,则不能用String。虽然字符数组很灵活,但是String可以加快字符串处理速度。
2.StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
答:
由于String具有不可变性,如果不停地进行字符拼接来修改字符串时,每次更改后的字符串是一个新的面向对象,而原来的字符串不会消失仍占用内存空间(系统可以定时清除占用空间),所以用String来频繁修改字符串时会占用大量空间,故当字符拼接操作量大的时候,则应运用StringBuilder来进行拼接。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
ava.lang.StringBuffer.append(char[] str) 方法追加char数组,即str参数为这个序列的字符串表示形式。数组参数的字符追加的顺序到这个序列的内容。这个序列以该参数的长度增加它的长度。
答:StringBuilder的内部使用字符数组来实现的,数组可以进行动态扩展。当输入字符后,先存放到缓冲区中,然后转换成字符数组添加到StringBuilder中。
3.字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
答:
输出结果为true
,创建了两个对象。首先初始化str1时创建"hi"常量字符串放入到常量池中,当再创建str2时,则会优先在常量池中搜索,若搜索到则指向相同的对象,若未搜索到就创建放常量池中。而str3则是直接在内存开辟空间创建对象。所以上述的str1和str2指向的是同一个面向对象,所以答案为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++;
这一串命令中包含了些什么操作?
答:
Integer i = 100;
自动装箱,基本类型->Integer类型
Integer x = 100; int y = x+1;x++;
包含了 自动装箱(100转换成Integer类型);然后自动拆箱将Integer类型转换为int类型;最后是自动拆箱(Integer类型转换为int类型)后加一再自动装箱回Integer类型。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
答:
因为在实际生活中,很多问题不单单是一个基本数据类型可以解决,当输入端错误或空时,基本数据无法表示这种状况,而包装类中可以很好的表示出来。加之基本数据类型之间的转换比较麻烦,定义包装类可以更加方便,解决问题更加全面。
5.实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。
推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
合作对象:姚雯婷
答:关于结队编程这个,最开始有和舍友尝试一起写一道题,但是在我们一同审题判断时,产生很大分歧,两个人思路差异有点大,然后我们就两个互相尝试自己的办法打代码,不过这样的话后面就没办法交流了,最后都是各自解决问题,最多在格式上有所互助。所以感觉结队代码的方式应该比较适合两个人打完之后交流,或者在更改格式啊或者小地方进行交流,不然的话是没办法进行互助交流的。
5.2 PTA-1综合小测验
答:
这道题四大部分:
- fib部分主要是编写 斐波那契数列,只要会编写函数很好解决;
sort部分则需要用
String[] str1=input.nextLine().split(" ");
来创建数组,达到分离的目的。再将转换成int类型进行排序,后输出。这道题的关键是输出格式,原先采用自己打的方式一直报错,后来发现Arrays.toString(num)
可以输出要求格式。不过到现在也不太明白之前的输出格式有什么错误。System.out.print("[");
for (j= 0; j<num.length; j++) {
if(j==0) {
System.out.print(num[j]);
}
else {
System.out.print(", "+num[j]);
}
}
System.out.print("]");- 关于search部分,只要学会创建静态变量,将sort中的数组定义为全局变量就可以完成。
getBirthDate,重点学会
str.substring(start,end)
函数的应用。
5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
答:
这道题的sort1和上一题差不多,比较好些。重点是sort2部分,刚开始百度想用Array.sort(类型,start,end)函数进行总排序,后来发现存入信息的id数组相当于一维数组下的字符串数组,没办法这么应用。之后在实验课上听讲到用冒泡法进行排序,这样需要改变顺序的时候整个id数组交换即可。
5.4 PTA-4动态数组
答:
这道题需要搞清楚每一行和数组下标的关系,在双层for循环中,如果i,j从一开始,则对应的下标应该减一。并且应该注意一行末尾最后一次打印应该不同。
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
答:
加上头import java.util.ArrayList;
首先学会创建ArrayList list = new ArrayList();(String)则是拿出来的时候为字符串类型。
这道题主要学会以下函数即可:
ch.contains("!!end!!")
list.add(0, "begin");
list.indexOf(str1)
list.lastIndexOf(str1)
list.get(0)
list.remove(0)
size()与isEmpty()
ArrayList是动态数组,有以下好处:
(1)动态的增加和减少元素
(2)灵活的设置数组的大小
5.5 选做:5-5(浮点数计算), 5-6(枚举),5-7(大整数相加)
5-5:本题主要运用BigDecimal类,开头加入import java.math.BigDecimal;,创建使用BigDecimal d = new BigDecimal(b); 和 函数 a.add(d); 进行精确计算即可。
5-6:本题运用枚举方法
,主要将构建代码块Grade getGrade(int score)在外定义,主要要掌握枚举的格式。后面引用switch语句就可以了。
5-7:本题用到大数字操作类中的BigInteger类,注意的是定义sum初值为0应该定义方式如下:
BigInteger sum=new BigInteger("0");
运用a.equalsIgnoreCase("e")函数进行E和e的判断。后运用sum.add();即可完成相加操作。
6.选做:公交卡里应该还有多少钱?请分析原因
答:计算机底层进行浮点数运算的时候出现了溢出问题,也就是说有符号的负数变成了无符号的极大地正数,故卡中应该是欠费的。
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命令?
源代码在:src目录下
字节码文件在:bin目录下
运行时,在bin目录下编译.class文件输出。
3. 码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
行数 | 新增行数 | 文件数 | 新增文件数 |
---|---|---|---|
233 | 233 | 6 | 6 |
注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt
201621123037《Java程序设计》第二周学习总结的更多相关文章
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 2017面向对象程序设计(Java)第二周学习总结
2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...
- 杨其菊201771010134《面向对象程序设计Java》第二周学习总结
第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
随机推荐
- 树莓派3B+学习笔记:9、更改软件源
树莓派系统安装完成后,由于默认软件源服务器访问速度慢,安装软件耗时会很长,可以通过更改软件源来加快软件的安装速度. 系统安装完成后默认软件源如下: 更改镜像源前需要自行查找镜像源,并记下网址: 1.阿 ...
- sqli-labs (less-8-less-10)
盲注需要掌握一些MySQL的相关函数:length(str):返回str字符串的长度.substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回.注意这里的pos ...
- 《Act with Prudence》读后感
<97 Things Every Should Know>中第一个编程方面的建议 文章链接:行事谨慎 很赞同文章中的观点,在做项目中是要谨慎行事和考虑后果.一直在项目前期考虑不够周到,以至 ...
- windows系统下系统变量path误删恢复方法
每台计算机安装程序不同,环境变量path会有不同,若误删了环境变量path,可以如下完美解决. Win+R 输入regedit打开注册表(开始-运行里输入regedit) 找到 HKEY_LOC ...
- 20155207 2016-2017-2《Java程序设计》课程总结
20155207 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总: 预备作业一:一路风景---我期待的是师生关系 预备作业二:学习情况的相关调查 预备作业三:安装虚拟 ...
- 20145226夏艺华 《Java程序设计》第9周学习总结
教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型和自定义枚举 会使用标准注解 第16章 整合数据库 16.1 JDBC入门 (一)JDB ...
- Yii2 使用 bootboxJS美化confirm窗口
有些关键操作比如删除,我们在执行前一般先弹出来个confirm确认窗口. 在Yii2中为一个操作添加confirm确认很容易.只需在链接出添加一个‘data-confirm' => '确实要添加 ...
- angularjs 路由机制
前言 AngularJS路由主要有内置的ngRoute和一个基于ngRoute开发的第三方路由模块ui-router,内置的ngRoute有时满足开发需求,使用ui-router可以解决很多原生ngR ...
- Appium+python 自动发送邮件(2)(转)
(原文:https://www.cnblogs.com/fancy0158/p/10056418.html) 移动端执行完测试case之后,通过邮件自动发送测试报告.大体流程如下: 1.通过unitt ...
- leetcode-下一个排列
下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外 ...