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

时间:2025-04-23 11:08:01

1. 本章学习总结

  1.final声明,一旦赋值不能被改变。移位运算符的应用,负数右移高位补“1”,正数右移高位补“1”。利用移位运算,按位与运算可以方便得出整数的32位二进制表示。

  2.String类的重要,被final所修饰,它的对象是不可变的,对象创建后是不再对它进行修改,可以进行字符串共享,直接从字符串池中取出使用。但是频繁修改字符串的话,则会大量字符串对象,例如对字符串的拼接虽不改变原字符串,但会产生大量字符串对象,此时应使用StringBulider。

  3.理解equals与“”的区别,如果比较的是字符串内容则使用equals而“”只比较是否是同一对象,只比较是否是同一地址。

  4.引用型数据和基本数据 ,基本类型可以赋值给引用型。

  5.for(int element:a)等价于for(int i=0;i<a.length;i++)

2. 书面作业

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

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

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

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

  分析:String其实是基于字符数组char[]实现的,用它来存放字符串,并且有一个int型的变量hash来存放计算后的哈希值。用一个空的构造器,创建空的字符序列,使用字符串类型的对象来初始化,使用字符数组来构造String(使用Arrays类复制),然后用字节数组将字节以charsetName编码格式拷贝给value,之后再解码造成String。

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

  因为String对象建立就是不可修改,所以使用String会产生大量的字符串对象。而使用StringBuilder类中的append()就可以对已有的对象进行修改,在进行大量字符串的修改操作上,append()的效率就高多了。

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

  不能,“==”在基本数据类型的时候,比较的是实际的值是否相同,而在比较引用型时候,则是堆内存的地址。如果比较内容的话要用equals()比较好,它比较的是字符串的序列是否相同。

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

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

   String str3 = new String(str1);

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

  以上输出结果:true。“hi”存在字符串池中,str1和str2同时指向“hi”,而String str3=new String(str1);产生的“hi”并不存在字符串池中,所以str1与str2引用值一样,与str3不一样。

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

  Integer是包装类(引用数字类型),而int是基本数据类型,它可以直接进行赋值。Integer是对象,要用一个引用指向这个对象。这个叫做对象的自动封箱与拆箱,相当于Integer i=Integer.valueOf(100);,在调用的时会自动拆箱,int i=intValue(100);

6.尝试分析下面代码输出结果

   Integer i1 = 127;Integer i2 = 127;

   i1 == i2;//true of false?

   Integer i1 = 128;Integer i2 = 128;

   i1 == i2;//true of false

  一个字节(-128到127)的整型数在jvm启动时会加载入内存,第一次调用Integer.valueOf(),发现Integercache中并没有127,所以创建一个新对象,Integer i2=127;,Integercache中已有这个对象直接引用,所以输出结果为true。而128已经超出Integercache范围了,所以生成了新的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目录下,尝试命令行下运行,截图。

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

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

   源代码放在src目录下,class文件放在bin目录下。eclipse在执行的时候直接编译,我们之前设置好了环境变量,并且eclipse环境设置为自动编译,一个class文件的组织方式是由“外部路径”和“内部路径”构成的,执行的要记住完整的类名和包名称。编译时“外部路径”默认为“output folder”的路径,“内部路径”为.java文件的包路径,按ctrl+f11运行,package中的路径和.java文件路径完全一致,所以eclipse自动根据.java文件存放路径够将完整的包路径执

行。

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

  ◦请描述一下你的技术基础(会什么语言,都写了多少行代码)

  ◦一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?

  ◦关于这门课的smart目标参考链接

  c、c++语言,但是掌握的并不扎实。一周里准备每天花一半的空闲时间学习java,做到每天打一份代码。通过问老师、百度、问同学的方式来解决做java时遇到的不懂的问题。smart目标:s(具体、量化):学好java,每天打一到两篇代码,并且上相关视频网站每天看一个视频学习java; m(可以衡量):每天可以打30行代码; a(可以达到):可以自己打出一篇较难的代码; r(相关性): 在学好java的同时,也涉及其他语言的学习; t(截止日期): 希望一个月内可以打200行代码。

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

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

    余额为-0.2元。浮点数计算不精确,金融计算不能用浮点数。

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

3.1本周Commit历史截图

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

3.2 实验总结

 学会使用了StringBuilder、BigDecimal、Arraylist,但是还不是很熟悉。实验也只会做些简单的,很经常答案错误。