201621123016《Java程序设计》第二周学习总结
1. 本周学习总结
1.本周学习重点:
字符串常量池:这是java中为减少字符串的建立而设计的,在没有使用new构建字符串时,jvm会从字符串常量池查找其值,如果没有则会创建这个字符串再把其放在字符串常量池中。这可以减少程序的内存开支从而起到优化的作用。
引用:在java中引用是与c/c++中的概念不同的,在java中引用的地址是会改变的而c/c++不会,在直接赋值时java会产生一个实参而c/c++会产生两个。
boolean类型:在c/c++中true和false可以分别用非零数字和零表示,而在java中只能使用true和false。
2. 书面作业
1.String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
String使用字符数组进行存储字符串。
1.2 分析其构造函数public String(char value[])
的作用?
把输入的字符串拷贝到String类型的value变量中。
1.3 阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?(重点)
在使用replace修改字符串的值时,这个函数会新生成一个长度与原来字符串相等的字符串。并在生成字符串的过程中把oldChar换成newChar。这样虽然替换了其值,但原String变量没有变化,这就体现其不可变性。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
String是一个类,里面的字符串是使用字符数组进行存储的。使用字符数组虽然可以处理字符串,但其大小是固定的,当输入更长的字符串时,它就会因为超出界面而发生错误。若把数组定的空间过大就会导致内存空间的浪费。使用String类型,它会根据你输入的字符串大小改变其数组的内存空间。这可以让我们减少对数组大小设定的困恼,而且在这个类中定义许多对字符串进行操作的函数,这可以方便我们对字符串的更改。
2.StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
因为使用String频繁修改字符串时,每一次修改都要生成新的字符串,这会导致内存空间的极大浪费和时间的大量开支。而直接使用StringBuilder中的中的方法修改字符串,会直接对原字符串进行修改,从而节省了空间和时间。因此在频繁修改字符串时,应该使用StringBuilder。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)
方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuide的append(char[] str)方法时,是如何实现添加字符的操作?
StringBuilder的append(char[] str)功能是向字符串里添加字符。StringBuilder内部使用字符串数组存放字符。调用StringBuilder的append(char[] str)方法时,这个方法会调用其父类AbstractStringBuilder中的append(char[] str)方法从而完成完成添加字符的功能。
3.字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
str1和str2引用了在字符串池中的同一串字符(最后结果输出true),在直接赋值时jvm会判断其字符串内容是否已在字符串池中,是的话就引用字符串池中的字符,不是的话就向其添加这个字符串,再引用。而使用new创建的str3则是在字符串池外新建一个空间,所以这段代码创建了两个字符串。
3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
对于引用类型不能使用==比较两个值是否相等,是因为==比较的是两个引用变量的地址,如果地址相等返回true否则false。即便其值相等用==返回的仍可能为false,他们间的比较应该用equal()方法。
4.Wrapper(包装类)
4.1 Integer i = 100;
//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;
这一串命令中包含了些什么操作?
Integer i = 100;
这句代码编译时会对其自动装箱,其相当于语句于
Integer i = Integer.parseInt(100);
Integer x = 100; int y = x+1;x++;
这一串命令包含了自动装箱,自动拆箱,和拆箱再装箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
java是一门面向对象的语言,java的基本类型是不包含对象性的,添加包装类可以使其具有对象性,并且在把基本类型改为包装类时可以在类中添加方法,丰富对基本类型的操作。
5.实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
队友:占恒
PTA上的题目有几题只对一部分,没办法得全分,在和舍友进行讨论后, 我的思想得到开阔,从对方那里了解一些新的思路。这让我把题目的一些要求更加了解,进而得了满分。感想:两个人在讨论时可以提供不同的解题思路,对我们开阔思路很有好处。
5.2 PTA-1综合小测验
这道题我在实行fib命令时没有多大困难,只是在第二个sort命令时会发生错误,后来发现是输入会吃回车而导致String类型变量没接收到字符串便向下执行,解决这个问题后是按要求输出,我定义了一个output方法来完成输出,后来发现直接把字符串数组放入动态数组Arrays.List类型中,输出结果相同。之后的search命令直接使用字符串自带的搜索方法便可以,而getBirthDate命令用substring方法截取后输出。
5.3 PTA-3身份证排序。并回答:使用sort2
方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
对输入的身份证用substring方法截取后,用compareTo方法比较,根据比较的大小把身份证从小到大排列,接着把其输出即可。如果需要对其进行降序排序,只要把上面的从小到大排列改为从大到小排列,接着把其输出即可。按其中的出生月份排序时把上面截取的范围从年月日改为月即可。
5.4 PTA-4动态数组
这题使用java的数组时,不要把一开始把每行的大小固定下来,要用循环依据第几行开几个空间来构建数组,否则在最后输出时会看到每行都有null输出。输出时还要注意一下格式System.out.printf("%-7s",s[i][j]);
5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
定义ArrayList类型时,要注意语法不要中的类型不能为基本类型,而应为引用类型。接着在做题目时只要掌握ArrayList类型中的一些基本方法便能很快做出题目。使用ArrayList不用考虑数组的大小,而且有一个Arrays类为其提供方法,使用便利。
5.5 选做:5-5(浮点数计算), 5-6(枚举), 5-7(大整数相加)
5-5(浮点数计算)
使用String类型接收输入,接着把其转为BigDecimal类型,用这个类型中的方法进行运算,便能对浮点数进行准确计算。
5-6(枚举)
在Main类外定义枚举类型,只有这样后面的Grade.class
输出的类名才为Grade,否则若定义在Main中,则会输出Main.Grade。
5-7(大整数相加)
我直接使用String类型接收输入,接着把其转为BigDecimal类型,用其中的方法完成加法运算。
6.选做:公交卡里应该还有多少钱?请分析原因
公交卡输出时发生问题,可能是程序员在设计时忽略了数据溢出的问题,从而导致卡里的巨额钱财。
3. 码云及PTA
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt
201621123016《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 ...
随机推荐
- nginx的源代码分析--间接回调机制的使用和类比
nginx使用了间接回调机制.结合upstream机制的使用来说明一下,首先明白几个事实: 1)事实上ngxin和下游client的连接使用的是ngx_http_connection_t,每一个连接相 ...
- git 下载与Linux源码安装最新版
win: https://git-for-windows.github.io/ 或 https://git-scm.com/downloads 官网! 源码安装git Git 的工作需要调用 ...
- WPF 后台Render线程崩溃, Exception from HRESULT: 0x88980406
近期遇到一个问题.窗口在Loaded同一时候Resize会出现黑屏或者直接崩溃, 调查发现是WPF后端的Render线程渲染UI到DirectX时崩溃. 硬件环境:WES7 + .Net4.0 关于W ...
- poj 1163 The Triangle &poj 3176 Cow Bowling (dp)
id=1163">链接:poj 1163 题意:输入一个n层的三角形.第i层有i个数,求从第1层到第n层的全部路线中.权值之和最大的路线. 规定:第i层的某个数仅仅能连线走到第i+1层 ...
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandle ...
- 关于java的线程
1 java的线程也是一个对象 所以,java线程对象也是由gc销毁的. 2 java线程对象等待被销毁的时机 当java线程执行完run()方法之后就在等待被销毁了,所以要一个线程对象不被销毁唯一的 ...
- Thread join方法的用途
主线程中会创建多个子线程做一些事情,主线程要用到这些子线程处理的数据,因此它需要等待所有的子线程处理完之后才继续运行.这就要用到join方法了.
- Routine Subroutine Coroutine 子程序 协程
https://en.wikipedia.org/wiki/Subroutine In computer programming, a subroutine is a sequence of prog ...
- 在给mysql数据库备份时,报错: mysqldump: Got error: 145: Table '.\shengdaxcom\pre_forum_thread' is marked as c rashed and should be repaired when using LOCK TABLES
在给mysql数据库备份时,报错: mysqldump: Got error: 145: Table '.\shengdaxcom\pre_forum_thread' is marked as cra ...
- Axure实现Tab选项卡切换功能
这几天用Axure画原型图的过程中,须要实现Tab选项卡切换的效果,但Axure中并没有类似于Tab控件的部件,所以能够用Axure中的动态面板(Dynamic Panel)来实现. 本文以已经汉化的 ...