201521123006 《Java程序设计》 第2周学习总结
1. 本周学习总结
本周进一步学习了java,了解了java编程中一些特定的用法,比如:在编译程序时可以使用import来减少输入包名称。本周还学会了使用枚举类(enum Choice{fab,sort})的 使用及switch语句和if...else语句字java中的使用。虽然java和C语言中控制流程的语句基本上相同,但是对于while语句中的条件不在可以是简单的条件,而是必须是条件式,且返回值为true或false。并且在实验课上对java的编程软件——eclipse的使用进行了进一步的加深。在实验课中学会了使用eclipse来管理自己的码云,这种方法对比起使用cmd来说,更加的方便,简洁,不需要输入过多的命令语句。而且发现了eclipse软件的更便捷之处,可以先行编写出程序的大体结构,eclipse软件可以快捷编写所需要的函数等。
2. 书面作业
Q1. 使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。
首先String对象虽然java语言中重要的数据类型,但其本身并不属于java的8种基本数据类型。因为关于对象的默认值是null,而String也是一种对象,所以String的默认值也 是null。
其次在C语言中,对于字符串的表示通常使用char数组,而在java中,通常使用String对象,在了解String对象的用法后可以默认String是对于char数组的进一步操作或者是延伸。String对象的作者针对一些方面进行了优化。String对象在不变性,常量池进行了优化,使其能够具有节约内存,性能好,安全的优势。
最后String对象是对于char数组本身无法封装字符串操作所需的基本方法的补充,是为提高处理字符串的效率,节约内存而设计优化的,毕竟字符串在计算机处理中有着很重要的地位。
**Q2. 为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String? **
因为对于String来说是对一串字符串进行操作,但是其是不可变类,而对于StringBuilder来说,它同样是对一串字符串进行操作,但是它却是为可变类。并且如果使用String 对字符进行修改,需要把字符都写入内存,然后删除原来的String对象,再创建一个String对象并读取内存内的数据,而使用StringBuilder则能够在原来的String对象上直接进行字 符串的修改,比起String更加简单,所需时间更少。
Q3. 比较两个字符串的值是否相等?为什么不能用==直接进行比较?
因为在java中“==”比较的是引用的值,“==”只能比较是否是同一个对象。在比较引用时,如果引用指向内存中的同一对象,结果为true。比较两个字符串的值是否相等, 一般是使用equals方法。
Q4. 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);
程序段的输出结果是:true。
在本程序段的第一行:它在常量池中创建了一个对象str1,它的值为“hi”,并且对象str2的值同样为“hi”,而str1,str2是为同一个字符串对象。
在本程序段的第二行:它则是在常量池中另外新创建了一个对象str3,并且把str1的值“hi”赋值给str3。
在本程序段的第三行:此行则是在比较str1和str2是否为同一个对象,而str1和str2是为同一个对象,所以此时输出“true”。
**Q5. Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i **
因为对于Integer来说,在JDK5.0的版本之后,能够采用自动装箱和自动拆箱,装箱就是将java中的基本类型转换成对象类型,而拆箱就是将对象类型的值取出来赋值给java中的基本对象类型。所以题目中的Integer i=100则可以理解成:Integer i = new Integer(100);int j = i.intValue。所以可以将100赋值给i。
**Q6. 尝试分析下面代码输出结果 **
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false
对于Integer来说,想要使所赋值的整数能够使用valueOf()函数缓存,则对赋值的整数要求在-128—127之间。而在上面的代码中,第一行中的整数为127,在其范围内,所以第二行输出的结果为:true。而代码的第三行中的整数为128,超出了范围,所以第四行输出的结果为:false。
输出结果:true
false
Q7. package与javac、 java、 -classpath、 -d
在 com.ibm包中编写 StringUtil类,内有一方法
public static void foo1(){
System.out.println(StringUtil.class+" method:foo1");
}
**在edu.jmu包中编写Main类,调用com.ibm.StringUtil的foo1方法 **
7.1 尝试用命令行进行编译并运行,截图
7.2 将生成的StringUtil.class放到d盘的lib目录下,将Main.class在d:\test目录下,尝试命令行下运行,截图。
7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理。
Eclipse中源代码放在src目录中,而class文件放在bin目录中。
因为对于Ctrl+f11来说,它执行的是含有main的代码,它首先会判断当前是否是可以执行的代码,没有包含main则会执行上次的代码。
Q8. 自己在这门课的目标与计划
。请描述一下你的技术基础(会什么语言,都写了多少行代码)
(1)C语言和c++,因为大一一年的实践都在学习C语言和c++,所以对于编写代码的量还挺大的,至少也有几千行了,具体没有数过。
(2)java,刚开始入门,编写的程序主要以pta上的实验题目为主,现在写的代码主要是实验一和实验二的编程题目。
。一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
准备利用每天晚上的时间来学习java及编写java的程序。
一周准备些二到三百行,或者更多,依情况而定。
采用以编程为主,实际应用为主,看书为辅的方式来学习java,毕竟即使看了好多遍的书,都抵不上自己动手编写下程序来得深刻和明白。
遇到困难打算自己先想想能不能自己解决,如果各种方法都行不通,则可以去询问老师,同学或者也可以在专业的网站上向广大的IT专业的人员询问。
。关于这门课的smart目标参考链接
首先对于smart目标是在目标管理中的一项原则,分别由「Specific、Measurable、Attainable、Relevant、Time-based」五个词组组成。这是订定工作目标时,必须谨记的五项要点。
S 即specific,代表具体的,指绩效考核要切中特定的工作指标,不能笼统;
M 即measurable,代表可度量的,指绩效指标是数量化或者行为化的,验证这些绩效指标的数据或者信息是可以获得的;
A 即attainable,代表可实现的,指绩效指标在付出努力的情况下可以实现,避免设立过高或过低的目标;
R 即relevant,代表相关性,指实现此目标与其他目标的关联情况;
T 即time-based,代表有时限,注重完成绩效指标的特定期限。
能够掌握好java的知识,能够独立完成一个java的大项目,希望能够在本学期期末的时候能够对于java运用自如,至少不需要在编写程序时经常不知道从哪里下手,同样也希望学习java能为以后的就业打好基础,虽然还没决定好在毕业后是否从事IT工作,但依旧希望学好java。
Q9. 选做:公交卡里应该还有多少钱?请分析原因
29.4
可能是无符号浮点数的小数位没有在正确的位置,而是后移了。
3. 使用码云管理Java代码
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
4. PTA实验
在这次的pta试验中,对于java中一些特定的用法有了了解,例如学会了使用Arrays及String的方式进行编写程序,从而使得程序变得更加简单,执行时间也有所缩短。而且在java中String是不可变类,当我们需要在有限制执行时间和内存大小时,我们需要采用StringBuilber,因为它是可变类,不会生成新对象。对于ArrayList的基本使用有了初步的了解,通过对ArrayList进行编程,从而对ArrayList更加熟悉,在以后使用到的时候能够很熟练。
5. 小任务(加分)(PS:有时间的话会补上的)
Q1. 现有choice.txt文件,里面包含上千行,上百题选择题。先在老师要将其中的题目转化为PTA网站的选择题。然而PTA网站上的选择题对输入格式有要求。要求如下:
* 题面第1行及选项行前不能有空格,题面其他行无此要求。
* 题面第1行结尾要包含答案字符串,内容形式@[C](2),代表该题答案为C,分值为2
* PTA出题格式需符合Markdown要求,才能有良好的效果。先在要求每一行结尾一定要有2个或以上的空格。
* 统计:题目数量
* 输出:最后生成outChoice.txt,包含经过处理过的所有问题。文件第1行,代表题目数量。
* 提示1:使用Scanner处理输入文件, 使用PrintWriter输出文件。
* 提示2:题目很简单,大概50行左右,不要畏难。
* 进阶:可以为将来的自动出题、组卷系统做准备