Java程序设计经典实验教案 - 图文(3)

2019-08-02 00:13

int[] array2 = array1.clone(); System.out.println(\克隆后数组元素是否相等:Arrays.equals(array1, array2):\ //使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确) Arrays.sort(array1); System.out.println(\元素3在array1中的位置:Arrays.binarySearch(array1, 3):\//如果不存在就返回负数 System.out.println(\元素9在array1中的位置:Arrays.binarySearch(array1, 9):\} } (1)编译TestArrays.java (2)运行TestArrays.class (3)把源程序写在实验报告中。 (4)程序的输出结果写在实验报告中。 【实验报告要求】 请在实验报告中对本次实验内容进行总结。

实 验 教 案

课题(项目)名称: 字符与字符类Character常用方法的使用,String、StringBuffer、计划学时:2 StringBuilder常用方法 实验类型: 1.验证性或基础性□ 2.综合性□ 3.设计性□ 4.创新性和研究型□ 授课日期: 年 月 日 【实验目的】 1. 掌握字符与字符类Character常用方法的使用 2. 区别String、StringBuffer、StringBuilder类 3. 掌握String、StringBuffer、StringBuilder常用方法的使用 第 周 星期 第 节 【实验要求】 1. 编写程序验证字符与字符类Character 2. 编写程序验证String、StringBuffer、StringBuilder类 【实验内容与步骤】 (一)字符与字符类Character常用方法的使用 Character类提供了一些有用的类(即静态)方法操作字符。可以创建一个字符的字符构造的对象: Character ch = new Character('a'); 1. 请编写程序,要求程序具有如下功能:将一个字符串中的小写字母变成大写字母,并将大写字母变成小写字母。 (1)编译 KY2_5.java (2)运行KY2_5.class (3)把源程序写在实验报告中。 import java.util.*; public class KY2_5 { public static void main(String args[]) { String s=new String(\ System.out.println(s); char a[]=s.toCharArray(); for(int i=0;i

s=new String(a); System.out.println(s); } } (4)查询资料列出Character类的常用方法并说明其作用。 (二) String、StringBuffer、StringBuilder常用方法 1. String 类 验证如下程序,并在实验报告写出运行结果并分析。 public class Main { public static void main(String[] args) { String str1 = \ String str2 = new String(\ String str3 = \ String str4 = new String(\ System.out.println(str1==str2); System.out.println(str1==str3); System.out.println(str2==str4); } } 运行结果: 分析:在class文件中有一部分来存储编译期间生成的字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区的运行时常量池。 因此在上述代码中,String str1 = \和String str3 = \都在编译期间生成了字面常量和符号引用,运行期间字面常量\world\被存储在运行时常量池(当然只保存了一份)。通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。 总所周知,通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。

2. String和StringBuilder

验证如下程序,并在实验报告写出运行结果并分析。 代码1:

public class Main {

public static void main(String[] args) { String string = \ for(int i=0;i<10000;i++){ string += \ } } }

结果分析:这句 string += \的过程相当于将原有的string变量指向的对象内容取出与\作字符串相加操作再存进另一个新的String对象当中,再让string变量指向新生成的对象,即每次循环会new出一个String对象。也就是说这个循环执行完毕new出了10000个对象,这样会造成巨大的内存资源浪费。实际上,JVM会自动将string+=\;优化成:

StringBuilder str = new StringBuilder(string);

str.append(\ str.toString(); 代码2:

public class Main {

public static void main(String[] args) {

StringBuilder stringBuilder = new StringBuilder(); for(int i=0;i<10000;i++){ stringBuilder.append(\ } } }

结果分析:这段代码new操作只进行了一次,也就是说只生成了一个对象,append操作是在原有对象

的基础上进行的。因此在循环了10000次之后,这段代码所占的资源要比上面小得多。

3. StringBuffer和StringBuilder

事实上,StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized,这个关键字是在多线程访问时起到安全保护作用的,也就是说StringBuffer是线程安全的。

比较以下两个的insert方法: StringBuilder的insert方法:

public StringBuilder insert(int index, char str[], int offset, int len) {

super.insert(index, str, offset, len);

return this; } StringBuffer的insert方法: public synchronized StringBuffer insert(int index, char str[], int offset, int len) { super.insert(index, str, offset, len); return this; } 【思考】这三个类是各有利弊,应当如何取舍? 当字符串相加操作或者改动较少的情况下,建议使用 String str=\这种形式;当字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。 【实验报告要求】 请在实验报告中对本次实验内容进行总结。 实 验 教 案


Java程序设计经典实验教案 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金融从业人员演讲稿-坚定理想信念让青春飞扬

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: