《Java技术》第二次作业
(一)学习总结
1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和==的区别。
equals方法和==的区别
由实例可以看出“==”是对字符串的地址作比较的,equals()方法是对内容作比较的。
2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
- 构造方法也就是类的初始化方法,每个java类实例化的时候都会调用一个构造方法,如果没用手动编写的话会有个默认的无参构造方法。
- 构造方法的重载
- 必须在同一个类
- 方法名相同
- 方法参数个数或参数类型(或参数顺序)不同,参数顺序指的是参数类型顺序与参数名字无关。
该代码没有通过编译,因为构造方法是一个有参的构造方法,在调用时应该传递参数,而Foo obj = new Foo()中没有参数。
3.运行下列程序,结果是什么?查阅资料,分析为什么。
结果为不等于0.3
- 对于不需要任何准确计算机的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。
4.运行下列程序,结果是什么?分析原因,应如何修改.
数组只声明了并没有初始化。
数组的初始化可以分为三种
- 第一种:特殊初始化,不用new关键字完成,在数组声明的同时完成初始化操作,也被称其为静态初始化。主要原因是因为采用这种初始化的方式,数组的存储空间的分配是由编译器完成的。
- 第二种:先使用new关键字创建数组,然后再分别为数组中的元素赋值,完成初始化操作。(注:如果数组元素类型为基本数据类型,在完成new 操作之后,数组中的元素会自动初始化为空值,可以直接使用,但是数组元素为引用类型,在完成new操作之后,没有给引用类型赋值,就直接使用数组中的元素,会产生运行时异常。)
- 第三种:使用new关键字创建数组,同时为数组中的元素赋值,完成初始化操作。
5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。
string
public class Test{
public static void main(String[] args){
String str="hello";
for(int i=0;i<10000;i++){
str=str+"world";
}
System.out.println(str);
}
}
StringBuffer
public class Test{
public static void main(String[] args){
StringBuffer buf=new StringBuffer();
for(int i=0;i<10000;i++){
buf.append("World");
}
System.out.println(buf);
}
}
- String的对象不可改变的,当进行字符串的连接操作,由于String类型的恒定性,不会改变str在内存中的地址,而是在托管堆上创建了另一个字符串对象,如果连接10000次就创建了10000个string类型对象,效率难免底下,而StringBuffer会在内存中开辟一块连续的内存,当增加字符串实际上是针对同一块内存的修改,所以效率更高,在字符串很少的情况下,可以采用String。
(二)实验总结
1.评分系统设计思路:
- (1)建立工程sorting,定义静态方法Max(double[] score),Min(double[] score),Avg (double[] score)分别实现求最大值,最小值,
平均值,并将数组类型定义为double型; - (2)定义方法bubbleSort(double[] a)利用冒泡排序将主方法中运用Avg(double[] score)方法求出的avg进行遍历排序,并按照从大到小
顺序输出; - (3)在主方法中调用以上四个方法,实现简单评分系统
- 问题一:在定义多个数组时出现未定义等错误;
- 原因:没有透彻理解局部变量与全局变量的区别;
解决方法:重新学习了局部变量与全局变量,并且根据eclipse代码间的错误提示,一次次尝试改对,最后解决了。
- 问题二:在程序最后编译时总是抛出数组越界异常
- 原因:
解决方法:开始不知道是什么异常,然后就在代码中添加try{}catch()捕获异常,尝试了许 多次都不成功,然后百度查询得知数组越界相关内容,然后逐一同意参数的初值以及参数的范围,最终得出了正确结论。
2.email地址识别程序设计思路:
- (1)定义boolean方法jundge(String email),在方法中if语句嵌套使用,并引用对象.indexOf()获取email字符串中的特殊字符的位置,
使用email.endsWith("gov")等判断字符串结尾字符 - (2)在主方法中引用import java.util.Scanner数据包,定义字符串数组,调用之前定义的方法;
- 问题一:在对对象.indexOf()方法使用时不是很清楚
- 解决方法:网上查询具体使用规则就懂了。
归纳总结:
- (1)几个程序总的来说思路还是很清楚,就是在对数组使用,包括一般数组,字符串数组使用的不是很熟,要多加练习。
- (2)一些从来没有注意到或是不经意的异常或错误出现,比如说数组越界,循环语句的使用,以及特殊位置的输出语句的使用过程要特别注意,自己感觉原因就是基础不够好,以后还是需要夯实基础。
- (3)在编写者几个程序的过程中运用了一些不熟或是之前就不知道的方法,通过查询并使用之后感觉自己懂得知识多了,感觉不错。另外在定义方法方面,对方法的定义规则理解也深了,并且是方法更规范,更准确。比如说类型以及方法名的书写。
(三)代码托管
链接:http://git.oschina.net/hebau_cs15/Java-CS01lxz
(四)学习进度条
代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 300/300 | 30/30 | Scanner, Random |
第5周 | 209/300 | 23/30 | String类和数组的使用,还学习了BigDecimal类如何对数字精确计算 |
第6周 |