1.本周学习总结

答:上课老师介绍了Java基本的数据类型,需要注意的地方有:**java的整型数都为带符号数**,**byte类型范围(-127,128)太小,所以我们一般不使用byte型,byte型常与switch结构一起用**、**对于一个浮点数来说,在Java中如果不加后缀就会被默认为double型数据**、**浮点数不够精确,不能够使用与金融计算,如果想要更精确的话就使用BigDecimal型**、**变量名一定要区分大小写,声明一个变量之后必须对变量进行一个显式的初始化**、**利用final声明的常量被赋值后不能再被修改**、**String对象创建后也不能再进行修改**。

2.书面作业

(1)使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?分析String使用什么来存储字符串的?分析其构造函数public String(char value[])的实现原理?分析public String replace(char oldChar, char newChar)的实现原理,回答String的不可变性在该函数中如何体现?(重点)


(2)为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?

答:因为String是不可变对象,所以每次修改字符串都是新建,非常浪费时间,而StringBuilder是可变的,利用append将修改的字符加到当前StringBuilder的末尾,效率会比String操作高很多。

(3)比较两个字符串的值是否相等?为什么不能用==直接进行比较?

答:如果直接用==比较的话,比较的是引用地址而不是字符串的值。

(4)尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);
答:该程序段输出的结果是true,因为这段代码共创建了2个字符串对象。第一次创建了一个对象是str1,第二次str2并不是创建新的对象,而是str2直接引用str1,第三次又新建了一个str3对象;上题也回答了==比较的是引用地址,所以str1和str2是相等的。

(5)Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?

答:因为基本类型的值就是一个数字或者一个字符又或者是一个布尔值,引用类型的值就是指向内存空间的地址,所以100就是数值100的本身,i是指向100的内存空间地址,因此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
答:Integer的范围是(-127,128),所以第一个结果是true,第二个结果是false,因为128不在Integer范围内,所以i1和i2比较的不是128这个数值,而是它们的地址。

(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,尝试分析背后实现的原理。
Eclipse中源代码放在src中,class文件放在bin中。

(8)自己在这门课的目标与计划

基础:只学过c语言,以前也没有经常写代码,没有计算过写过多少行
目标:能够熟练掌握Java语言,并且可以写出一些简单的Android的小项目。
计划:坚持每天至少花半个小时在Java上,要在编程这方面多花点时间,遇到问题就上网查或者问助教、同学和老师

(9)选做:公交卡里应该还有多少钱?请分析原因

答公交卡里应该是欠费了,我觉得原因可能是公交卡里的余额范围是一定的,如果超过这个范围的最大值或者小于范围的最小值,那么公交卡的余额系统可能就会发生数据的上溢或者下溢从而导致出错。

3.使用码云管理Java代码

4.PTA实验总结

(1)问题:每次拿到题目都会忘记先分析再开始做,所以每次很容易写到一半就没了思路,然后不得不重写
     解决方法:拿到题目先思考如何实现题目的要求,然后再写伪代码,最后再开始编程
(2)问题:在编写第一题的时候,因为digits数组的原因,出现了一个java.lang.nullpointerexception错误
     解决方法:重新new了一个digits数组
(3)问题:拼接字符串时没有使用StringBuilder,然后程序一直得不到正确的答案
     解决方法:最后使用StringBuilder然后.append的方法成功通过pta的提交
(4)问题:关于markdown的,复制粘贴图片有时候可以有时候加载不出来
     解决方法:改为上传,上传比较稳定。
  其他问题还在发现中。。。。。