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

1.本周学习总结

  • Java有基本数据类型(类似c)和引用数据类型(不同于c)两种数据类型。
  • Java是面向对象的语言,引用类型变量存放指向对象的引用,而不是该对象本身。因此判断两对象值是否相等时,需使用equals==用于比较两对象的引用是否相同。
  • String对象是不可变的,例String x = "abc": x = x + "123",x指向的原来的内容“abc”未改变,而是生成新对象“abc123”。
  • 频繁对字符串进行修改时,使用StringBuilder,避免耗用大量时间及内存。
  • Java包含基本数据类型、对象、包装类、数组,基本类型有对应的包装类。包装类的自动装箱及自动拆箱语法。
  • foreach循环,for(type element:arr)
  • 多维数组:数组初始化、不规则数组。
  • 动态数组ArrayList及其常用方法,特点:无法存放基本数据类型,只能存放引用类型

2.书面作业


1.String-使用Eclipse关联jdk源代码

1.1查看String对象的源代码(截图),分析String使用什么来存储字符串?

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

String使用char数组存储字符串。

1.2分析其构造函数public String(char value[])的作用?

通过char数组,生成String字符串对象。

1.3阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

String的本质是字符串常量,一旦定义后不可改变。

1.4简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

string属于类而且不可变,而字符数组是可变的。String使用了字符串常量池,避免了占用大量的存储空间。


2.StringBuilder

2.1 结合PTA -2(StringBuilder),说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

频繁修改字符时,由于String是不可变的,因而直接使用String会不断生成新对象,造成内存的大量占用,耗时。

2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?

Q1:StringBuilder的append(char[] str)功能为将 char 数组参数的字符串表示形式追加到此序列,实现拼接。

Q2:用字符数组存放字符。

Q3:在原字符串的尾部添加。


3.字符串与字符串池

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

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

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

创建了了两个字符串对象,执行String str1 ="hi", str2 ="hi";时,str1指向“hi”的引用后,在常量池内添加了“hi”这一元素,而str2并没有使用new,且指向对象也为“hi”,这时在常量池内已经有了“hi”,所以str2直接复用这个“hi”,所以在最后的str1==str2判断比较二者引用时,输出true。第二句中使用了new,创建了新的对象,故本段代码一共创建了两个字符串对象。

3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?

Q1:Java中对于引用类型,使用=进行赋值时,此时变量指向的为该对象的引用,而不是该对象的本身,使用==进行判断时是判断二者的引用是否相同,而不是判断值。

Q2:比较引用类型的值是否相等时,应用equals


4.Wrapper(包装类)

4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?

Q1Integer i = 100;可以替换为Integer i=new Integer(100);此处实为包装类的自动装箱语法,将基本类型转换Integer类型。

Q2:包含了自动装箱、自动拆箱。

4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了


5.实验总结

5.1 结对编程实践

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

本次我的结对编程对象为吴延彬。结对编程有好处也有坏处,但对我来说可能还是不大适合,好处时可以多和同学交流各自对题目的看法以及编写思路,加快对题目的解决速度。但是各自编写一段时间感觉上就比较鸡肋,由于各自的编写习惯不同,代码上难免出现较大的出入,,一旦出现分歧,就很有可能打乱原有的思路,也比较耗时。

5.2 PTA-1综合小测验

本题中需使用switch对输入指令作区分,方法同C。斐波那契数列采用了for循环依次将前两数值相加后赋值。获取生日则使用了substring截取指定字符串。

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

使用了substring截取指定位置的字符串并输出,对于sort2则使用了compareTo,根据数字比较两个Character对象,如果该 Character 等于此 Character,则返回 0;如果该 Character 的数值小于参数 Character,则返回小于 0 的值;如果该 Character 的数值大于参数 Character,则返回大于 0 的值(有符号比较)。返回的值大于0时,则交换前后顺序,将大者后置。若需降序,同理,将大者前置即可,指定月份比较则将读入进行比较的位置进行改变。

5.4 PTA-4动态数组

创建动态字符串二维数组,将乘法口诀表内容作字符串依次存入,再对输出形式加以调整依次输出。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?

本题中创建ArrayList后,多使用JDK文档中ArrayList类所包含的方法。数组一旦确定大小,无法改变,而ArrayList可动态改变大小,且Java中ArrayList类中包含了众多的常用方法,使用便捷。

5.6 选做:5-5(浮点数计算)

本题中主要问题是浮点数计算的精确问题,由于计算机采用二进制,若直接使用+*等符号进行运算,结果不精确。需使用String的形式读取参数,再使用类BigDecimal转化为不可变的、任意精度的有符号十进制数,使用addmultiply进行运算。


3.码云及PTA

3.1 码云代码提交记录

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

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

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

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

3.2 截图题集“Java基本语法”PTA提交列表

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

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

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

3.3 使用老师发的jar程序统计每周的代码量

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


上一篇:Redis学习笔记(1)-Key


下一篇:java-Ada中的构造方法