1、第一章 Java语言概述,华中科技大学IBM技术中心 2008,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序相关问题Java虚拟机,Java虚拟机在真实机器中用软
2、件模拟实现的一种抽象的机器。(Java虚拟机规范) Java虚拟机主要由五个部分组成:指令系统、寄存器、栈、存储区、碎片回收区 解释和执行Java程序编译后产生的字节码,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序相关问题Java API,Java API是Java系统提供的预先定义好的软件组件的集合,它们提供了许多可供程序员调用的常用功能 丰富的API为程序员提供了极大的方便,但也是学习的难点 要学会使用Java API手册(The Java 2 Platform API Specification )http:/ & IBM C
3、omputer Tech. Center,Java程序相关问题 Java程序的运行机制,操作系统,源代码,可执行代码,目标码,编译,连接,运行,源代码,字节码,编译,解释执行,Java解释器,传统语言的运行机制,Java语言的运行机制,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序相关问题Java程序类型,Java应用程序(Java Application) 是独立完整的程序 在命令行调用独立的解释器软件即可运行 主类必须有main方法,这也是程序的入口 Java小程序 Java Applet是指在客户端运行的Java小程序,一般来说
4、客户端是指用户所使用的浏览器 Java Servlet是在服务器端执行的Java小程序,为了能够支持Servlet的运行,服务器端必须安装包含Java虚拟机的服务器软件,这种能够支持服务端小程序的服务器一般被称为应用服务器,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java开发环境,JDK/J2SDK(Java Developer Kit) JDK1.02 JDK1.1.x JDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5) Java集成开发环境(IDE) NetBeans JBuilder Eclipse J
5、Creator Forte for Java Visual J+ WSAD ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,JDK的安装与设置,从http:/ 本的JDK(本课程采用J2SDK1.3以上版本) 在Windows平台上运行安装程序,以安装JDK 设置PATH(文件路径)参数。由于JDK提供的实用程序都在安装目录下的子目录bin下,为了能在任何目录下直接使用文件名调用这些程序,必须设置操作系统的文件路径参数,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,环境设置,在Windows环境下,
6、为了快速进入指定目录的命令行窗口,可在注册表中增加项目: HKEY_CLASSES_ROOTDirectoryshell进入命令行command 默认值设为:cmd /k “cd %1“,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,JDK的目录结构,bin目录中包含了所有JDK5.0提供的实用程序 demo目录中包含了JDK5.0自带的实例程序 inculde目录中包含了一些支持Java native方法的CC+头文件 jre目录中包含了Java运行环境所需的所有文件,这个目录中所包含的java运行环境是JDK私有的,它只为JDK的实用程序提供
7、支持 lib目录中包含了Java开发环境所需的库文件,它们以jar文件的形式保存 sample目录中包含的是体现JDK5.0新特性的一些例程,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,JDK实用程序简介,javac:Java编译器,将Java源代码编译为字节码; java:Java解释器,用来解释执行Java程序的字节码文件; appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器; javadoc:根据Java源代码及其说明语句生成的HTML文档; jdb:Java调试器,可以逐行地执行程序、设置
8、断点和检查变量; javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件; javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序的开发过程,编辑源代码 编译源代码文件运行程序,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序的开发过程编辑源代码,一般情况下,我们可以使用系统平台下的任何文本编辑器进行源代码的编辑,在Windows平台下常用的是Window系统自带
9、的“记事本”程序或“写字板”程序 Java源码大小写敏感 Java源码文件的扩展名:.java Java源程序文件也不能随意命名,其文件名必须与程序中主类的类名完全相同,包括大小写在内,public class MyFirstJavaApp public static void main(String args) System.out.println(“This is My First Java Application!”); ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序的开发过程编译源代码,使用JDK实用程序javac对源代码文
10、件进行编译 C:MyJavajavac MyFirstJavaApp.java 如果系统提示符再次出现并且没有任何消息产生,那么编译便成功了 如果有系统报错消息产生,则表示程序编译出错,程序员必须阅读报错信息,并根据这些信息对程序进行修改 程序成功编译后,在与源代码文件同一目录下会生成一个新的文件,其文件名与源代码文件名相同,扩展名为“.class”。这个文件就是源代码文件编译产生的程序字节码文件 MyFirstJava.class,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java程序的开发过程运行程序,要执行一个Java程序非常简单,只需
11、在字节码文件所在目录下输入下列命令就可以了: java 字节码文件名,Question?,第2章 面向对象的编程概念,华中科技大学IBM技术中心 2006,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,面向对象 vs. 面向过程,面向对象(OOP)Object-Oriented Programming 用类class封装数据以及与数据相关的操作 用类的继承性来实现类的重用性 多态性 面向“对象”,由对象提供服务面向过程(POP)Procedure-Ori
12、ented Programming 以功能为组织单元 通过数据结构来描述具体的问题 数据在功能(函数)之间以参数的形式被传送,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,现实世界中的对象,现实世界是由对象构成的 现实世界中任何实体都可以看作是对象 现实世界中的对象有两个共同特征: 状态 行为,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer
13、Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,消息的性质,同一对象可接收不同形式的多个消息,产生不同的响应 同一个消息可以发给不同的对象,所做出的响应可以截然不同 发送方不需要知道接受方如何对请求予以响应的,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST
14、 & IBM Computer Tech. Center,实例(Instance),定义:特定类所描述的一个具体对象,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,单重继承与多重继承,单重继承:一个子类只有一个唯一确定的父类 单重继承所构成的类的关系结构是一棵树 多重继承:一个子类可以有多个不同的父类 多重继承所构成的类的关系结构是一个格 Java语言仅支持单重
15、继承,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,继承的作用,使软件系统具有开放性更好地进行抽象与分类实现代码的复用提高可维护性,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,类型(Type),在面向数值的编程中,类型通常用作数据的表示。在Java这样的强类型语言中,在编译期,每一个变量和表达式都有一个类型与之相对应 Java中的类型:基本类型、类、接口,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,接口(Interface),接口和类一样也是一种类
16、型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是抽象方法(即没有实现的方法)。 接口中所定义的方法由实现(implement)该接口的类来实现,一个类可以同时实现多个接口 接口机制使Java的面向对象编程变得更加灵活。解决了单重继承带来的问题 接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,面向对象的示例,本例中包含很多对象:点、窗口、颜色、点击事件 代码:ClickMeApp.java ,
17、ClickMe.java,Spot.java,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Spot类,public class Spot /instance variablesprivate int size;public int x, y;/constructorpublic Spot() x = -1;y = -1;size = 1;/methods for access to the size instance variable public void setSize(int newSize) if (newSize = 0) size
18、= newSize;public int getSize() return size; ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Spot对象,private Spot spot = null; . spot = new Spot();,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,示例中的消息,g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1);,华中科技大学IBM技术中心,HUST &
19、 IBM Computer Tech. Center,示例中的继承和接口,public class ClickMe extends JComponent implements MouseListener .,public class ClickMe extends JComponent implements MouseListener ./Methods required by the MouseListener interface. public void mousePressed(MouseEvent event) if (spot = null) spot = new Spot(); s
20、pot.setSize(RADIUS); spot.x = event.getX(); spot.y = event.getY(); repaint(); public void mouseClicked(MouseEvent event) public void mouseReleased(MouseEvent event) public void mouseEntered(MouseEvent event) public void mouseExited(MouseEvent event) ,欢迎提问,Question !,第三章 Java语言基础,华中科技大学IBM技术中心,华中科技大学
21、IBM技术中心,HUST & IBM Computer Tech. Center,变量(Variable),对象将它的状态存储在变量中 定义: 变量是一个由标识符命名的数据项 变量名必须是一个合法的标识符 -一个以字母开头的无限制的Unicode字符序列。 变量的声明: 类型 名称 = 初始值; int i; double pi = 3.1415926; String name;,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,数据类型,每个变量都必须有一个数据类型. 一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。 Java编程语
22、言有两大类数据类型: 原始类型(primitive) 引用类(reference),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,原始类型变量包含单个值,其大小和格式与它的类型匹配:数字、字符或布尔值。 Java语言没有unsigned类型 0xFFFF和0xFF谁大? Java语言必须强制类型转换 float f = 0.1; boolean b = 1;,原始类型,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Cen
23、ter,引用类型,数组,类和接口就是引用数据类型.与原始类型变量的值不同的是,引用类型变量的值是对应变量代表的一个值或一组值的引用(也就是其地址) 在其他语言里引用被称为指针或者内存地址。Java不支持显示地使用地址,而是使用变量的名称代替。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,变量的引用,通过变量名引用变量的值 简单名称:由单个标识符组成的名称 限定名称:通过类名或对象名引用改类或对象中的成员变量 System.out.println(i+spot.x);,华中科技大学IBM技术中心,HUST & IBM Computer Tech.
24、 Center,作用范围,变量的作用范围是可以通过简单名称引用该变量的程序区域 作用范围也决定了系统为该变量创建和释放内存的时间,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,例子,int i = 10; if ( i 0) int i = 20; System.out.println(“The value of i = ” + i); System.out.println(“The value of i = ” + i);,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,最终变量,你可以在任意范围里
25、将一个变量定义为最终变量(final) 最终变量的值一经初始化就不能改变 类似于C语言中的常量(const),final int aFinalVar = 0;,final int blankfinal; . . . blankfinal = 0;,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,操作符、表达式、语句和块,自学!,第四章 对象基础和简单数据对象,华中科技大学IBM技术中心,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer T
26、ech. Center,对象的生命周期,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,CreateObjectDeom,public class CreateObjectDemo public static void main(String args) /创建一个Point对象和两个Rectangle对象Point origin_one = new Point(23, 94);Rectangle rect_one = new Rectangle(origin_one, 100, 200);Rectangle rect_two = new Rect
27、angle(50, 100);/ 显示rect_one的宽、高以及面积System.out.println(“Width of rect_one: “ + rect_one.width);System.out.println(“Height of rect_one: “ + rect_one.height);System.out.println(“Area of rect_one: “ + rect_one.area();rect_two.origin = origin_one; /设置rect_two的位置/ 显示rect_two的位置System.out.println(“X Positi
28、on of rect_two: “ + rect_two.origin.x);System.out.println(“Y Position of rect_two: “ + rect_two.origin.y);/ 移动rect_two并且显示它的新位置rect_two.move(40, 72);System.out.println(“X Position of rect_two: “ + rect_two.origin.x);System.out.println(“Y Position of rect_two: “ + rect_two.origin.y); ,华中科技大学IBM技术中心,H
29、UST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,对象创建的实例,public class Point public int x = 0; public int y = 0; public Point(int
30、x, int y) this.x = x; this.y = y; ,Point origin_one = new Point(23, 94);,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,构造器的重载(Overload),public class Rectangle public int width = 0;public int height = 0;public Point origin;public Rectangle() origin = ne
31、w Point(0, 0);public Rectangle(Point p) origin = p;public Rectangle(int w, int h) this(new Point(0, 0), w, h);public Rectangle(Point p, int w, int h) origin = p;width = w;height = h; . ,一个类可以包含多个构造器,这种情况成为构造器的重载 同一个类中的多个构造器通过参数的数目及类型的不同来区分,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心
32、,HUST & IBM Computer Tech. Center,实例成员与类成员,实例成员包括实例变量与实例方法 实例成员依赖于实例存在 同一个类的不同实例都拥有一份实例变量的拷贝,对某个实例的实例变量的操作不影响到其它实例 实例变量遵循对象的生命周期,随着对象的创建而创建,随着对象的消亡而消亡 必须通过实例的引用来调用实例方法 类成员包括类变量与类方法 类成员不依赖于实例存在 同一个类的不同实例共享同一个类变量,对类变量的改变会影响到所有实例 类变量的生存期不依赖于对象,其它类可以不用通过创建该类的实例,直接通过类名访问它们。同样,类方法也可以直接通过类名访问。,华中科技大学IBM技术中
33、心,HUST & IBM Computer Tech. Center,实例成员与类成员,class ABCD char data; static int share_data; class Demo ABCD a,b,c,d; /实例化 ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,实例变量的引用,简单名称当实例变量处在作用域内(即对象的类的代码内) 的时候 限定名称objectReference.variableName当实例变量处在作用域外时使用限定名称,System.out.println(“Width of rect_one: “ +
34、rect_one.width); System.out.println(“Height of rect_one: “ + rect_one.height); int height=new Rectangle().height;,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,关于变量访问的说明,建议不要通过其它对象或类直接操作对象的变量,可能引起无效值 理想情况下,类会提供一些方法,其他对象可以通过他们检查或修改变量,确保值有效,而且如果变量的类型和名称发生了变化,不会影响它的使用者 在某些情况下,可以允许对对象变量的直接访问,以使类更小更简单,也
35、可使变量适用于更广泛范围; JAVA编程语言提供了一个访问控制机制,通过这种机制,类可以决定那些其它的类可以直接访问它的变量(第五章中介绍)。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,调用对象的方法,使用限定名称来调用对象的方法 objectReference.methodName(argumentList);或者objectReference.methodName();,System.out.println(“Area of rect_one: “ + rect_one.area(); rect_two.move(40, 72); int
36、 areaOfRectangle = new Rectangle(100, 50).area();,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,关于方法调用,方法被声明为public,就可以被任何其它的类所访问。有时,类需要限制对它的方法的访问 类可以使用与控制变量访问相同的机制来对它的方法进行访问控制(第五章中介绍),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,对象的清除,JAVA运行时环境在当对象不再被使用的时候清除它们,这个过程就是所谓的“垃圾收集”(garbage collection)
37、 Java的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作为垃圾收集起来并释放。 垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,无用对象的判定,当某个对象不在被任何引用变量引用时,该对象是无用对象,将被清除。一般有如下两种情况:,引用变量超出了作用域 StringBuffer s = newStringBuffer(“thisisatest”); /
38、 超出对象作用域 ,引用变量引用了其它对象或引用了空对象 StringBuffer s = new StringBuffer(“test1”); s = new StringBuffer(“test2”); / 引用了新的对象 s = null; / 引用为空,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,finalize()方法,在对对象进行垃圾收集前,Java运行时系统会自动调用对象的finalize()方法来释放系统资源。 某些情况下,程序员可能需要实现该方法来释放不由垃圾收集器所控制的资源。但这种情况非常少见 finalize()方法是在
39、Object中有缺省实现,在用户自定义的类中,它可以被覆盖,但一般在最后要调用父类的finalize()方法来清除对象所使用的所有资源,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,问题一,下列程序的运行结果?,public class SomethingIsWrong public static void main(String args) Rectangle myRect;myRect.width = 40;myRect.height = 50;System.out.println(“myRects area is “ + myRect.ar
40、ea(); ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,问题二,现有一个Point和Rectangle对象,代码执行后有多少引用指向它们?有没有对象需要垃圾收集?,Point point = new Point(2,4); Rectangle rectangle = new Rectangle(point, 20, 20); point = null;,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符和字符串,Java API提供了三个处理字符数据的类: Character:这个类的实例可以容
41、纳单一的字符数值。该类还定义了一些简洁的方法来操作或者检查单一字符数据。 String:这个类用于处理由多个字符组成的不可变数据。 StringBuffer:这个类用于存储和操作由多个字符组成的可变数据。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符类(Character),字符类的对象包含单个字符值当需要使用对象时,可以用字符对象替代原始的char类型的变量,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符类构造器和方法,Character(char)Character类唯一的构造器,它创
42、建一个字符对象,其中包含由参数提供的值,一旦创建了Character对象,它包含的值就不能改变。 compareTo(Character)这个实例方法比较两个字符对象包含的值,这个方法返回一个整数值,表示当前对象中的值是大于、等于还是小于参数所包含的值,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符类构造器和方法,equals(Object)这个实例方法比较当前对象包含的值与参数对象包含的值,如果两个对象包含的值相等,那么这个方法返回true toString()这个实例方法将此对象转换为字符串 charValue()这个实例方法以原始cha
43、r值的形式返回此字符对象包含的值 isUpperCase()这个实例方法判断一个原始char值是否是大写字母,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符类例程,public class CharacterDemo public static void main(String args) Character a = new Character(a);Character a2 = new Character(a);Character b = new Character(b);int difference = pareTo(b);if (dif
44、ference = 0) System.out.println(“a is equal to b.“); else if (difference 0) System.out.println(“a is greater than b.“); System.out.println(“a is “+ (a.equals(a2) ? “equal“ : “not equal“)+ “ to a2.“);System.out.println(“The character “ + a.toString() + “ is “+ (Character.isUpperCase(a.charValue() ? “
45、upper“ : “lower“)+ “case.“); ,程序的输出: a is less than b. a is equal to a2. The character a is lowercase.,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符类类方法,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,问题,Character a = new Character(a); Character b = new Character(a);,下列boolean表达式的值是true还是false? (
46、1)pareTo(b)=0 (2)a.equals(b) (3)a=b,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符串和字符串缓冲区,Java平台提供两个类String和StringBuffer,它们用于存储和操作字符串由多个字符组成的字符数据。 String类用于其值不能改变的字符串; StringBuffer类用于被修改的字符串,通常用来动态的构造字符数据。 字符串是常量,比字符串缓冲区更高效,而且字符串可以被共享。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符串(String),使
47、用字符串常量时,需要创建String对象,和其它对象不同,String对象可以通过简单赋值语句创建: String name = “Petter”; 此外,也可根据String类的构造函数创建String对象: String name = new String(“Petter”); 对于程序任何位置出现的双引号标记的字符串,系统都会自动创建一个String对象。 可通过String对象的方法对字符串进行操作,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符串构造器,华中科技大学IBM技术中心,HUST & IBM Computer Tech.
48、Center,字符串的不可变性?,String类用于其值不能改变的字符串 观察下列程序:,public class StringTestpublic static void main(String args)String s=“abc“;s=s+“defg“;System.out.println(s); ,程序运行结果是abc还是abcdefg?,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符串缓冲区(StringBuffer),String对象表示
49、的是不可更改的字符串对象,如果需要修改String对象所表示的内容,必须重新创建一个对象: String str = “Petter”; str = str + “ 当修改操作频繁,或字符串的值很大时,会额外分配大量内存 因此,Java语言引入了一个StringBuffer类,用来表示内容可以扩充和修改字符串对象,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,StringBuffer构造器,必须使用new操作符创建字符串缓冲区,String s = “Dot saw I was Tod“; StringBuffer dest = new StringBuffer(s);,