201521123026《Java程序设计》第2周学习总结

时间:2021-05-25 08:57:51

1. 本章学习收获

1.熟悉了码云的部分功能的使用

2.java编程基础的巩固以及延伸

3.解决了部分PTA编程时所遇到困难并明白了解决困难的方法的原理

4.了解了用package和import管理类别

5.初步了解了对象与封装,以及继承与多态

2. 书面作业

1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。

201521123026《Java程序设计》第2周学习总结

201521123026《Java程序设计》第2周学习总结

设计思路:String 使用 private final char value[]来实现字符串存储,String其本质是字符char 常量,且一旦定义后不可改变

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

StringBuilder类是直接用于字符串操作的类,不同于String,其进行操作时不需要每次都生成新的对象并为其分配内存空间,而是在原代码上进行修改,效率较高。

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

若有两个字符串的值完全相同,但存于不同的字符串池时(对象不同),用==比较后的结果为false;只有当两个字符串的值完全相同并且同存于一个字符串池时(对象相同),==比较的结果才是true。若要比较两个字符串string1和string2,建议使用string1.equals(string2)。(可以说==的比较是地址和值的比较而equals的比较是数值的比较)

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

String str1 =“hi“, str2=“hi“;

String str3 = new String(str1)

System.out.println(str1==str2);

输出结果为true,创建了两个字符串对象。在创建String str1=“hi”时,java会先在字符串池中寻找是否有存在“hi”这个字符串(如果没有就创建一个新对象“hi”并让str1指向它)而str2=“hi”因为字符串池中已存在“hi”字符串,所以不会再新建立对象,而是将str2也指向已存在的“hi”,因此str1与str2的对象相同所以结果为true。而String str3 = new String(str1)在原有的基础上又创建了一个新的字符串对象,因此一共2个。

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

装箱(即直接将一个基础数据类型传给其相应的封装类(wrapper class)的做法)。integer是int的包装类,装箱过程中JDK自动调用Integer.valueOf(100)*返回指向已经存在的对象的引用;否则创建一个新的Integer对象。

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

理由:在进行自动拆装箱时,JVM对处在在-128~127(系统默认)之间的Integer值,会先查看缓存有没有打包过相同的值(为了节省内存)如果有则按原生数据返回;而在超出该范围的Integer值,则是会创建新的Integer实例.

源代码:

public static Integer valueOf(int i) {

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

通常情况下,IntegerCache.low=-128,IntegerCache.high=127

第一个等式中,Integer值127在系统默认的范围内,i1、i2建立在同一Integer实例中(值相同地址相同),返回true;第二个等式中,Integer值128在系统默认的范围外,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 尝试用命令行进行编译并运行,截图

201521123026《Java程序设计》第2周学习总结

javac -d . StringUtil.java

javac -d . Main.java

java -cp . edu.jmu.Main

class com.ibm.StringUtil method:foo1

7.2 将生成的StringUtil.class放到d:\lib正确的目录结构下,将Main.class在d:\test正确的目录结构,尝试在命令行下运行,并截图。

201521123026《Java程序设计》第2周学习总结

javac -d D:\lib StringUtil.java

javac -cp D:\lib -d D:\test.Main.java

java -cp .;D:\test edu.jmu.Main

class com.ibm.StringUtil method:foo1

7.1和7.2在完成的过程中出现了一些困难。201521123026《Java程序设计》第2周学习总结

我想是可能因为我这周重装eclipse软件后出现错误,无法提取全部文件安装完成或者是系统环境变量没有设置好所造成的,待重新验证

在老师的指点下 我用everything在电脑中寻找了javac.exe发现查找不到,怀疑是文件损坏,于是重新安装了一下JDK。安装完毕后重新在电脑中查找得到了javac.exe在电脑中的所在目录

201521123026《Java程序设计》第2周学习总结

201521123026《Java程序设计》第2周学习总结

经过配置系统环境变量解决了关于JAVAC所存在的问题。

7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理。

在src里面存放源代码,在bin文件夹中存放class。

8.自己在这门课的目标与计划(1)请描述一下你的技术基础(2)一周准备花多少时间在这门课上?(3)采用怎样的学习方式?(4)遇到困难打算怎样解决(5)小目标

(1)技术基础:C语言,C++,数据结构(编程能力较为薄弱)(2)希望每周除了课堂和作业之外能多花不低于十个小时的时间用来学习JAVA并努力尝试自己编写代码。(3)以课前自我学习为主,课堂时间用来巩固所学的知识,并根据老师的教学,对自己所学的知识进行补充完善,并在课后做练习。(4)先尝试通过书上,网上查找资料自己独立解决问题不行再询问同学,老师等

(5)希望能扎实掌握并巩固该门专业知识,对于一些项目,不求自己能独立编写,但至少看源代码时能读得轻松,这串代码是什么意思,原理是什么,怎么用的 都要清清楚楚等等

3. PTA实验总结及码云上代码提交记录

实验1:java中函数的调用,switch以及枚举类型的结合

实验2:要求掌握StringBuilder类的使用。如stringBuilder.delete(int x,int y)(删除该序列中的由位置X开始到位置y-1截止的字串字符并返回删除了字串字符后的序列)、stringBuilder.append(i)将i追加在stringBuilder结尾等

实验3:ArrayList数组存储身份证号。采用sub.substring(start,stop)提取字符串中两个指定下标间的字符,用Collection.sort(list,new Comparator())进行升序操作等

实验4:通过循环实现二维数组存储乘法口诀并将其输出。

实验5:用BigDecimal准确表示一般数据类型所不能表示的16位有效数字以上的数,从而通过调用其相应方法进行积、和运算(因为BigDecimal创建的是对象因此无法使用算术运算符直接进行运算)

实验6:熟悉java中枚举类型的使用以及函数的调用

实验7:用BigInteger以及ArrayList表示若干大的整数并用BigInteger模拟int型的加法操作进行大整数求和 同时附带上很全很强大的BigInteger的用法http://blog.csdn.net/w00w12l/article/details/7290750

实验8:用ArrayList数组实现,注意List.get(i),List.remove(i),List.add()的用法。

3.1本周Commit历史截图

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示

201521123026《Java程序设计》第2周学习总结

(这周重装eclipse的时候出现文件夹拒绝访问 文件提取失败,部分已经写好的代码没有上传到码云,还需培养随写代码随传码云的习惯。。)