201521123103 《Java学习笔记》第二周学习笔记
一、本周学习总结
1、学习了数据类型的使用:整数类型、浮点类型、 boolean类型、数组等以及类型的转换,最重要的是学会了import引用包;
2、学习了string类对象的拼接、字符串池、枚举类型;
3、实验课学会了如何Eclipse Egit与码云管理代码。以及 bigdecimal和arrays的用法。
二、书面作业
Q1、使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。
String对象的源代码
String对象的设计思路:String的对象是不可变的,它是一个常量,可以用字符数组创建,也可以用new运算符创建。
Q2、为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String ?
答:因为String的对象是不可变的,如果频繁的对字符串的进行修改,会产生大量的字符串对象,效率会降低。而用StringBuilder可以在原来的字符串上直接进行拼接,简单而快捷,大大的提高了效率。
Q3、比较两个字符串的值是否相等?为什么不能用==直接进行比较?
答:“==”比较字符串需要看是否为同一对象。如果2个字符串是同一个对象,那可以用==,如果不是同一个对象,用“==”进行比较即使值相等但是如果对象不同,答案也为false。所以要比较俩字符串的值是否相等需要用到equals实现。
Q4、尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;String str3 = new String(str1)System.out.println(str1==str2);
答:输出结果是:true。因为在创建str1对象时建立了一个字符串池,并将"hi"存入其中,而str2并没有创建新对象,而是直接指向了字符串池中的"hi"。也就是说str1和str2指向了同一个"hi",所以程序段的输出结果是true。然后str3在字符串池外又新建了一个对象。如果与str3比较就是false。
Q5、Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i
答:这是包装类与整形之间的转换,是jdk自己帮我们自动完成了调用Integer.valueOf(100),相当于Integer i=new Integer(100)。
Q6、尝试分析下面代码输出结果
Integer i1 = 127;Integer i2 = 127;i1 == i2;//true of false? Integer i1 = 128;Integer i2 = 128;i1 == i2;//true of false
答:输出结果分别是true和false。
因为该题调用了Integer.valueOf(),所以Integer i其实相当于Integer i=Integer.valueof(),这个函数存放在数组中,而它的范围在-128-127之间。127属于这个范围则第一题的i1与i2是同一个对象,结果是true。而第二题的i1与i2的128超出了这个范围,i1和i2就会分别创建一个新的Integer对象,i1和i2指的是不同的对象,所以结果是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,尝试分析背后实现的原理。
答:源代码放在src里面,class放在bin文件夹中。
Q8、自己在这门课的目标与计划:请描述一下你的技术基础(会什么语言,都写了多少行代码)一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
答:技术基础:基础不好,只会写简单的C和C++程序。没有数过写了多少代码,但感觉很吃力,并没有找到方法;
接下来打算多练习编程,有不会的问老师、同学。寻找到自己对这门课的兴趣,学会编程的技巧和方法。
三、使用码云管理Java代码
四、PTA实验
本周做的是实验二的实验,而我并没有全部完成,只完成了2、4、5题,1题没有编译成功。
实验中遇到的问题:
1、在eclipse上执行正确但在PTA上就编译错误了;
2、String类对象的新建和处理存在问题;
3、对BigDecimal的用法不是很明确。
4、对java还不太了解,函数的调用存在问题。
解决办法及体会;
把老师上课讲的内容又仔细的学了一遍,查百度问同学,一开始觉得希望渺茫,很挫败,但在努力之后还是有收获,以后更要多下功夫下java上,毕竟自己差的还很多。