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

1. 本章学习总结

(1)认识PATH和CLASSPATH;
(2)SET PATH/CLASSPATH和-cp的用法;
(3)了解BigDecimal、BigInteger、ArrayList/List等类的用法。

2. 书面作业

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


答:String其实是基于字符数组char[]实现的。

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

答:string是值类型,stringbuilder是引用类型,string每次修改字符串都是新建,然后删除旧的串会很影响效率,而stringbuilder是在字符串的末尾操作,和string比较快。String对象是不可变的,具体指字符串一旦创建了,就不能更改、不能变长或变短。

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

答:==比较的是字符串的地址而不是内容,例如:String s1=new String("Hello"); String s2=new String("Hello"); 则(s1==s2)=false,即使内容相同,由于不是指向同一个对象,有两个不同的地址,也会返回false。在java中,比较两个字符串是否相等应该使用equals()。

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

String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);

答:输出结果为true。这段代码一共创建了两个字符串对象,str1和str2都是在同一个字符串池里的同一个"hi",而String str3 = new String(str1)建立了另一个对象"hi",str1和str2地址相同,str1和str3地址不同。

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

答:Integer=100,实际上调用的是Integer.valueOf(int 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。int常量池(虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和floating point常量)和对其他类型,字段和方法的符号引用。)中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 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: est目录下,尝试命令行下运行,截图。
7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理。

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

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

8.1 请描述一下你的技术基础(会什么语言,都写了多少行代码)
8.2周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?

答:技术基础:C/C++,程度马马虎虎,有时候写代码还会懵逼,需要参考其他资料才有头绪,至于写了多少代码,个人感觉当初学C语言时写的挺多的,后面变懒了。。。。。。感觉一周大部分课余学习时间都花在java上了(光写代码就要花蛮长时间吧)。。。。。。首先要完成PTA上的编程作业,然后再另外花时间及时解决平时累积的问题,争取不给期末挖太大的坑(这学期科目太多,坑太大期末会来不及填坑的)。遇到困难找学霸啊,感觉身边都是大神啊,只不过都藏得很深。。。。。。然后就是度娘啦,虽说度娘不是万能的,但是加上自己的思考可能也许大概就解绝问题了呢hhhhh。

3. 使用码云管理Java代码

4. PTA实验总结

5-1,在进行排序操作时要对List进行remove操作,否则在第二次循环时第二次的输入数据和第一次的数据一起放入List中;
5-2,字符串截取应使用substring()函数,一开始使用append()对字符串进行简单的追加操作,不符合题目要求总是报错;
5-3,sort2部分代码参考他人代码,有待进一步熟悉;
5-4,要注意规定二维数组每一行的长度使输出结果正确;
5-7,参考他人代码,Eclipse上执行不显示结果,但是PTA上可以通过,暂时还没找到原因。。。。。。。。。。。。
5-8,ArrayList类用法很不熟练,有待加强;
编写程序时尽量用调用函数的形式吧,全部都堆在main函数里理解起来也费劲,用调用子函数的形式容易看懂,也更容易发现错误。
原文地址:https://www.cnblogs.com/ghnb/p/6484273.html