201521123059 《Java程序设计》第二周学习总结
1.本周总结
本周老师讲了和自己掌握了以下内容:
(1).三元条件运算符
表达式1?表达式2:表达式3;
(2). 字符串String类
String的不可变优点:编译器可以让字符串共享,效率高。但是如果涉及到频繁修改字符串的话,会产生大量字符串对象。
(3).String对象的拼接和StringBuilder
String对象的拼接方法:使用+拼接字符串会产生新的String对象,而不会修改原先的字符串,会产生大量字符串对象。
(4).不可变字符串-字符串池
对于使用包裹起来的字符串字面常量,会先在字符串池中进行查找,如果有则不新建。
(5).检测字符串内容是否相等
当比较字符串的内容而且不分大小写时可以用"str1".equalsIgnoreCase("str2")进行比较;当用时,只能比较是否为同一对象,不然比较的是引用的值。
(6).输入输出-Scanner(扫描器)
Scanner使用分隔符将输入分解为标记,默认的分隔符为空白符,如空格、回车换行等
(7).结构化程序设计三种基本流程:
"顺序结构"、"选择结构"、"循环结构"
选择结构:Java语句提供了两条基本的分支选择语句,if["二选一"]和switch["多选一"]。
循环结构:Java语句中有三种循环结构,如下图。
(8).一维数组、二维数组、多维数组以及不规则数组的初始化。
2.书面作业
1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。
2.为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?
答:因为string是传统的处理字符串方式,再处理频繁的字符串时string的效率大大不如StringBuilder的高。
3.比较两个字符串的值是否相等?为什么不能用==直接进行比较?
答:比较字符串是否引用同一地址,如果2个字符串是同一个对象,那可以用,如果不是同一个对象,只是比较内容是否一致,则不可以用==。
4.尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);
答:因为对于包裹起来的字符串字面常量,会先在字符串池中进行查找,而且str1和str2的引用地址相同,所以输出true。创建了两个字符串对象。
5.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i
答:因为Integer i=100相当于Integer i=new Integer(100),在调用时会自动拆箱,然后相当于得到 int b=i.intValue,所以可以将100赋值给i.
6.尝试分析下面代码输出结果
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false
答:第一个输出true,第二个输出false。因为自动装箱与拆箱的功能事实上是编译程序蜜糖,在编译时期根据所写的语法决定是否进行装箱或拆箱动作。第一个程序代码由于127在-128~127之间,所以 i1会 从缓存中传回Integer实例,Integer i2=127执行时要打包的同样是127,也是从缓存中返回同一实例,所以i1与i2会参考到同一个Integer实例,使用比较会返回true。第二个程序是128不在-128~127之间, 所以i1直接建立新的Integer实例,Integer i2=128执行时,同样也是直接建立新的Integer实例,所以i1与i2不会参考到同一个Integer实例,使用比较就会返回false。
7.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,尝试分析背后实现的原理。
答:源代码放在JDK中的src目录中;class文件放在JDK的bin目录。
8.自己在这门课的目标与计划
◦请描述一下你的技术基础(会什么语言,都写了多少行代码)
我们学习过了C语言,数据结构,Java这个学期开始学习,但是我自己只会编写一下八角简单的代码,如果代码天长的或者难一点的就很难写出来了。我的语言基础很薄弱,自己课后也没有学习过什么与专业有关的东西,所以在上实验课时或者写老师布置的实验时会迷茫。我自己写过的代码比较少,不超过300行。
◦一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
现在一周发在这门科目上的时间比较多,一周除了睡觉时间60%空余时间都花在Java上,但是自己基础挺薄弱的,成效比较低,现在也挺想把握好基础,但是大一没有掌握好基础现在漏洞很多,以至于大部分实验写不出来。现在一周打算把老师布置的作业独立完成,实在有困难的就会参考同学的,给自己一周写代码的目标是100~150行。以前主要的学习方式是看书还有敲代码以及通过老师布置的作业来掌握所学的语言,课后有时也会问同学一些问题,但是问老师的比较少。现在打算不仅通过上述所讲的方式学习,还需要课后通过相关书籍还有资料在掌握Java语言。。。。希望老师给个建议,怎么学习Java还有补回以前的漏洞。因为语言基础的薄弱,所以在学习Java语言时会遇到挺多问题的,一般时问同学或者参考以前相关代码解决,或者去百度一下,查阅资料比较少。打算今后学习遇到问题会加多查阅相关书籍的通道还有问老师的方式。
9.没有做
3. 使用码云管理Java代码
•在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
-
PTA实验
•题目集:jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)
•实验种碰到的问题、思考、收获与解决方案
问题: 1.没有在程序开始时写import…………,会提示找不到符号的错误。
2.在写密码生成器的时候,开始用Arrays.toString(arr),每个字符之间会用逗号隔开。
3.很多时候在PTA上提交是答案错误或者是编译错误,但是在eclipse里面编译执行时是正确的。
4.在eclipse里面编程时很多时候第一次提交不能成功,编译成功了,但是输出答案有误。
思考:1.还不习惯java中在开头要有类;
2.在PTA上提交时不能有包名,主函数名要是Main,否则是答案错误。
收获:1.通过实验掌握了数组的初始化,还了解了新的内容动态数组;
2.掌握了ArrayList和subSring的一些基本应用,需要排序时不用在写一个排序函数,可以直接调用ArrayList;
3.通过编写实验了解到了eclipse里面的一些快捷按键给我们带来的便利,为编写程序省一点时间。 -
小任务(加分)
没有写