1、1大家好大家好第一章第一章 JavaJava语言概述语言概述华中科技大学华中科技大学IBM技术中心技术中心 20083456JavaJava程序相关问题程序相关问题JavaJava虚拟机虚拟机JavaJava虚拟机虚拟机在真实机器中用软件模拟实现的一种抽象的机器。(在真实机器中用软件模拟实现的一种抽象的机器。(JavaJava虚拟机规范)虚拟机规范)JavaJava虚拟机主要由五个部分组成:指令系统、寄存器、栈、存储区、碎片回收区虚拟机主要由五个部分组成:指令系统、寄存器、栈、存储区、碎片回收区 解释和执行解释和执行JavaJava程序编译后产生的字节码程序编译后产生的字节码 7JavaJav
2、a程序相关问题程序相关问题Java APIJava APIJava APIJava API是是JavaJava系统提供的预先定义好的软件组件的集合,它们提供了许多可供程序员调用的常用功能系统提供的预先定义好的软件组件的集合,它们提供了许多可供程序员调用的常用功能丰富的丰富的APIAPI为程序员提供了极大的方便,但也是学习的难点为程序员提供了极大的方便,但也是学习的难点 要学会使用要学会使用Java APIJava API手册手册(The JavaThe Java2 Platform API Specification2 Platform API Specification)8JavaJava程
3、序相关问题程序相关问题 Java程序的运行机制程序的运行机制源代码可执行代码目标码编译连接运行源代码字节码编译解释执行传统语言的运行机制Java语言的运行机制9JavaJava程序相关问题程序相关问题JavaJava程序类型程序类型 JavaJava应用程序(应用程序(Java ApplicationJava Application)是独立完整的程序是独立完整的程序在命令行调用独立的解释器软件即可运行在命令行调用独立的解释器软件即可运行主类必须有主类必须有mainmain方法,这也是程序的入口方法,这也是程序的入口 Java Java小程序小程序Java AppletJava Applet是指
4、在客户端运行的是指在客户端运行的JavaJava小程序,一般来说客户端是指用户所使用的浏览器小程序,一般来说客户端是指用户所使用的浏览器 Java ServletJava Servlet是在服务器端执行的是在服务器端执行的JavaJava小程序,为了能够支持小程序,为了能够支持ServletServlet的运行,服务器端必须安的运行,服务器端必须安装包含装包含JavaJava虚拟机的服务器软件,这种能够支持服务端小程序的服务器一般被称为应用服务器虚拟机的服务器软件,这种能够支持服务端小程序的服务器一般被称为应用服务器 10JavaJava开发环境开发环境JDK/J2SDKJDK/J2SDK(J
5、ava Developer KitJava Developer Kit)JDK1.02JDK1.02JDK1.1.xJDK1.1.xJDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5)JDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5)JavaJava集成开发环境(集成开发环境(IDEIDE)NetBeansNetBeansJBuilderJBuilderEclipseEclipseJCreatorJCreatorForte for JavaForte for JavaVisual J+Visual J+WSAD WSAD 11JDK
6、JDK的安装与设置的安装与设置从可以下载相关版从可以下载相关版 本的本的JDKJDK(本课程采用(本课程采用J2SDK1.3J2SDK1.3以上版本)以上版本)在在WindowsWindows平台上运行安装程序,以安装平台上运行安装程序,以安装JDKJDK设置设置PATHPATH(文件路径)参数。由于(文件路径)参数。由于JDKJDK提供的实用程序都在安装目录下的子目录提供的实用程序都在安装目录下的子目录binbin下,为了能在任何目录下,为了能在任何目录下直接使用文件名调用这些程序,必须设置操作系统的文件路径参数下直接使用文件名调用这些程序,必须设置操作系统的文件路径参数 12环境设置环境设
7、置在Windows环境下,为了快速进入指定目录的命令行窗口,可在注册表中增加项目:HKEY_CLASSES_ROOTDirectoryshell进入命令行command默认值设为:cmd /k cd%113JDKJDK的目录结构的目录结构binbin目录中包含了所有目录中包含了所有JDK5.0JDK5.0提供的实用程序提供的实用程序demodemo目录中包含了目录中包含了JDK5.0JDK5.0自带的实例程序自带的实例程序inculdeinculde目录中包含了一些支持目录中包含了一些支持Java nativeJava native方法的方法的CC+CC+头文件头文件jrejre目录中包含了目
8、录中包含了JavaJava运行环境所需的所有文件,运行环境所需的所有文件,这个目录中所包含的这个目录中所包含的javajava运行环境是运行环境是JDKJDK私有的,它私有的,它只为只为JDKJDK的实用程序提供支持的实用程序提供支持liblib目录中包含了目录中包含了JavaJava开发环境所需的库文件,它开发环境所需的库文件,它们以们以jarjar文件的形式保存文件的形式保存samplesample目录中包含的是体现目录中包含的是体现JDK5.0JDK5.0新特性的一些例新特性的一些例程程 14JDKJDK实用程序简介实用程序简介javacjavac:JavaJava编译器,将编译器,将J
9、avaJava源代码编译为字节码;源代码编译为字节码;javajava:JavaJava解释器,用来解释执行解释器,用来解释执行JavaJava程序的字节码文件;程序的字节码文件;appletviewer(appletviewer(小程序浏览器小程序浏览器):一种执行:一种执行HTMLHTML文件上的文件上的JavaJava小程序类的小程序类的JavaJava浏览器;浏览器;javadocjavadoc:根据:根据JavaJava源代码源代码与与其说明语句生成的其说明语句生成的HTMLHTML文档;文档;jdbjdb:JavaJava调试器,可以逐行地执行程序、设置断点和检查变量;调试器,可以
10、逐行地执行程序、设置断点和检查变量;javahjavah:产生可以调用:产生可以调用JavaJava过程的过程的C C过程,或建立能被过程,或建立能被JavaJava程序调用的程序调用的C C过程的头文件;过程的头文件;javapjavap:JavaJava反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。15JavaJava程序的开发过程程序的开发过程 编辑源代码编辑源代码 编译源代码文件编译源代码文件运行程序运行程序 16JavaJava程序的开发过程程序的开发过程编辑源代码编辑源代码一般情况下,我们可以
11、使用系统平台下的任何文本编辑器进行源代码的编辑,在一般情况下,我们可以使用系统平台下的任何文本编辑器进行源代码的编辑,在WindowsWindows平台下常用的是平台下常用的是WindowWindow系统自带的系统自带的“记事本记事本”程序或程序或“写字板写字板”程序程序 JavaJava源码大小写敏感源码大小写敏感JavaJava源码文件的扩展名:源码文件的扩展名:.java.javaJavaJava源程序文件也不能随意命名,其文件名必须与程序中主类的类名完全相同,包括大小写在内源程序文件也不能随意命名,其文件名必须与程序中主类的类名完全相同,包括大小写在内 public class MyF
12、irstJavaApp public static void main(String args)System.out.println(“This is My First Java Application!”);17JavaJava程序的开发过程程序的开发过程编译源代码编译源代码使用使用JDKJDK实用程序实用程序javacjavac对源代码文件进行编译对源代码文件进行编译C:MyJavajavacMyFirstJavaApp.java如果系统提示符再次出现并且没有任何消息产生,那么编译便成功了如果系统提示符再次出现并且没有任何消息产生,那么编译便成功了如果有系统报错消息产生,则表示程序编译出错
13、,程序员必须阅读报错信息,并根据这些信息对程序如果有系统报错消息产生,则表示程序编译出错,程序员必须阅读报错信息,并根据这些信息对程序进行修改进行修改程序成功编译后,在与源代码文件同一目录下会生成一个新的文件,其文件名与源代码文件名相同,扩展程序成功编译后,在与源代码文件同一目录下会生成一个新的文件,其文件名与源代码文件名相同,扩展名为名为“.class.class”。这个文件就是源代码文件编译产生的程序字节码文件。这个文件就是源代码文件编译产生的程序字节码文件 MyFirstJava.class18JavaJava程序的开发过程程序的开发过程运行程序运行程序 要执行一个要执行一个JavaJa
14、va程序非常简单,只需在字节程序非常简单,只需在字节码文件所在目录下输入下列命令就可以了码文件所在目录下输入下列命令就可以了:java java 字节码文件名字节码文件名19第第2章章 面向对象的编程概念面向对象的编程概念华中科技大学华中科技大学IBM技术中心技术中心 200622面向对象面向对象 vs.vs.面向过程面向过程面向对象(面向对象(OOPOOP)Object-Oriented ProgrammingObject-Oriented Programming用类用类classclass封装数据以封装数据以与与与数据相关的操作与数据相关的操作用类的继承性来实现类的重用性用类的继承性来实现
15、类的重用性多态性多态性面向面向“对象对象”,由对象提供服务,由对象提供服务面向过程(面向过程(POPPOP)Procedure-Oriented ProgrammingProcedure-Oriented Programming以功能为组织单元以功能为组织单元通过数据结构来描述具体的问题通过数据结构来描述具体的问题数据在功能数据在功能(函数函数)之间以参数的形式被传送之间以参数的形式被传送23现实世界中的对象现实世界中的对象现实世界是由对象构成的现实世界是由对象构成的现实世界中任何实体都可以看作是对象现实世界中任何实体都可以看作是对象 现实世界中的对象有两个共同特征:现实世界中的对象有两个共同
16、特征:状态状态行为行为 242526272829消息的性质消息的性质同一对象可接收不同形式的多个消息,产生不同的响应同一对象可接收不同形式的多个消息,产生不同的响应同一个消息可以发给不同的对象,所做出的响应可以截然不同同一个消息可以发给不同的对象,所做出的响应可以截然不同发送方不需要知道接受方如何对请求予以响应的发送方不需要知道接受方如何对请求予以响应的3031实例(实例(InstanceInstance)定义:特定类所描述的一个具体对象定义:特定类所描述的一个具体对象323334单重继承与多重继承单重继承与多重继承单重继承:一个子类只有一个唯一确定的父类单重继承:一个子类只有一个唯一确定的父
17、类单重继承所构成的类的关系结构是一棵树单重继承所构成的类的关系结构是一棵树多重继承:一个子类可以有多个不同的父类多重继承:一个子类可以有多个不同的父类多重继承所构成的类的关系结构是一个格多重继承所构成的类的关系结构是一个格JavaJava语言仅支持单重继承语言仅支持单重继承35继承的作用继承的作用使软件系统具有开放性使软件系统具有开放性更好地进行抽象与分类更好地进行抽象与分类实现代码的复用实现代码的复用提高可维护性提高可维护性36类型(类型(TypeType)在面向数值的编程中,类型通常用作数据的表示。在在面向数值的编程中,类型通常用作数据的表示。在JavaJava这样的强类型语言中,在编译期
18、,每一个变量和这样的强类型语言中,在编译期,每一个变量和表达式都有一个类型与之相对应表达式都有一个类型与之相对应JavaJava中的类型:基本类型、类、接口中的类型:基本类型、类、接口37接口(接口(InterfaceInterface)接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是抽象方法(即没有实现的方法)。是抽象方法(即没有实现的方法)。接口中所定义的方法由实现(接口中所定义的方法由实现(implementimplement)该接口的类来实现,一个类
19、可以同时实现多个接口)该接口的类来实现,一个类可以同时实现多个接口接口机制使接口机制使JavaJava的面向对象编程变得更加灵活。解决了单重继承带来的问题的面向对象编程变得更加灵活。解决了单重继承带来的问题接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。细节各不相同,但对用户来说是一样的行为。38面向对象的示例面向对象的示例本例中包含很多对象:点、窗口、颜色、点击事件本例中包含很多对象:点、窗口、颜色、点击事件 代码:代
20、码:ClickMeApp.java ClickMeApp.java,ClickMe.javaClickMe.java,Spot.java Spot.java 39SpotSpot类类public class Spot /instance variables private int size;public int x,y;/constructor public Spot()x=-1;y=-1;size=1;/methods for access to the size instance variable public void setSize(int newSize)if(newSize=0)s
21、ize=newSize;public int getSize()return size;40SpotSpot对象对象private Spot spot=null;.spot=new Spot();41示例中的消息示例中的消息g2d.setColor(Color.WHITE);g2d.fillRect(0,0,getWidth()-1,getHeight()-1);42示例中的继承和接口示例中的继承和接口public class ClickMe extends JComponent implements MouseListener .public class ClickMe extends JC
22、omponent implements MouseListener ./Methods required by the MouseListener interface.public void mousePressed(MouseEvent event)if(spot=null)spot=new Spot();spot.setSize(RADIUS);spot.x=event.getX();spot.y=event.getY();repaint();public void mouseClicked(MouseEvent event)public void mouseReleased(MouseE
23、vent event)public void mouseEntered(MouseEvent event)public void mouseExited(MouseEvent event)43欢迎提问欢迎提问第三章第三章 JavaJava语言基础语言基础华中科技大学华中科技大学IBM技术中心技术中心变量(变量(VariableVariable)对象将它的状态存储在变量中对象将它的状态存储在变量中定义定义:变量是一个由标识符命名的数据项变量是一个由标识符命名的数据项 变量名必须是一个合法的变量名必须是一个合法的标识符标识符 -一个以字母开头的无限制的一个以字母开头的无限制的UnicodeUnic
24、ode字符序列。字符序列。变量的声明:变量的声明:;int i;int i;double pi=3.1415926;double pi=3.1415926;String name;String name;46数据类型数据类型 每个变量都必须有一个数据类型每个变量都必须有一个数据类型.一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。JavaJava编程语言有两大类数据类型:编程语言有两大类数据类型:原始类型原始类型(primitive(primitive)引用类(引用类(reference)reference)474
25、8原始类型变量包含单个值,其大小和格式与它的类型匹配:数字、字符或布尔值。原始类型变量包含单个值,其大小和格式与它的类型匹配:数字、字符或布尔值。JavaJava语言没有语言没有unsignedunsigned类型类型0 xFFFF0 xFFFF和和0 xFF0 xFF谁大?谁大?JavaJava语言必须强制类型转换语言必须强制类型转换float f=0.1;float f=0.1;boolean b=1;boolean b=1;原始类型原始类型 49引用类型引用类型数组,类和接口就是引用数据类型数组,类和接口就是引用数据类型.与原始类型变量的值不同的是,引用类型变量的值是对应变量代表的一与原
26、始类型变量的值不同的是,引用类型变量的值是对应变量代表的一个值或一组值的引用(也就是其地址)个值或一组值的引用(也就是其地址)在其他语言里引用被称为指针或者内存地址。在其他语言里引用被称为指针或者内存地址。JavaJava不支持显示地使用地址,而是使用变量的名称代替。不支持显示地使用地址,而是使用变量的名称代替。50变量的引用变量的引用 通过变量名引用变量的值通过变量名引用变量的值简单名称:由单个标识符组成的名称简单名称:由单个标识符组成的名称限定名称:通过类名或对象名引用改类或对象中的成员变量限定名称:通过类名或对象名引用改类或对象中的成员变量System.out.println(i+spo
27、t.x);System.out.println(i+spot.x);51作用范围作用范围 变量的作用范围是可以通过简单名称引用该变量的程序区域变量的作用范围是可以通过简单名称引用该变量的程序区域作用范围也决定了系统为该变量创建和释放内存的时间作用范围也决定了系统为该变量创建和释放内存的时间52例子例子 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);53最终变量最终变量 你可以在任意范围里将一个变量定义为最终变量(你可以在任意范围里将
28、一个变量定义为最终变量(finalfinal)最终变量的值一经初始化就不能改变最终变量的值一经初始化就不能改变类似于类似于C C语言中的常量语言中的常量(const)(const)final int aFinalVar=0;final int blankfinal;.blankfinal=0;54操作符、表达式、语句和块操作符、表达式、语句和块自学!自学!55第四章第四章 对象基础和简单数据对象对象基础和简单数据对象华中科技大学华中科技大学IBM技术中心技术中心57对象的生命周期对象的生命周期58CreateObjectDeomCreateObjectDeompublic class Crea
29、teObjectDemo 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 Rectangle(50,100);/显示显示rect_one的宽、高以的宽、高以与与面积面积 System.out.println(Width of rect_one:+rect_one.width);S
30、ystem.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_tworect_two的位置的位置 /显示显示rect_two的位置的位置 System.out.println(X Position of rect_two:+rect_two.origin.x);System.out.println(Y Position of rect_two:+rect_two.ori
31、gin.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);5960616263对象创建的实例对象创建的实例public class Point public int x=0;public int y=0;public Point(int x,int y)this.x=x;this.y=y;
32、Point origin_one=new Point(23,94);6465构造器的重载(构造器的重载(OverloadOverload)public class Rectangle public int width=0;public int height=0;public Point origin;public Rectangle()origin=new Point(0,0);public Rectangle(Point p)origin=p;public Rectangle(int w,int h)this(new Point(0,0),w,h);public Rectangle(Poin
33、t p,int w,int h)origin=p;width=w;height=h;.一个类可以包含多个构造器,这种情况成为构造一个类可以包含多个构造器,这种情况成为构造器的重载器的重载同一个类中的多个构造器通过参数的数目同一个类中的多个构造器通过参数的数目与与类型类型的不同来区分的不同来区分6667实例成员与类成员实例成员与类成员实例成员包括实例变量与实例方法实例成员包括实例变量与实例方法实例成员依赖于实例存在实例成员依赖于实例存在同一个类的不同实例都拥有一份实例变量的拷贝,对某个实例的实例变量的操作不影响到其它实例同一个类的不同实例都拥有一份实例变量的拷贝,对某个实例的实例变量的操作不影响
34、到其它实例实例变量遵循对象的生命周期,随着对象的创建而创建,随着对象的消亡而消亡实例变量遵循对象的生命周期,随着对象的创建而创建,随着对象的消亡而消亡必须通过实例的引用来调用实例方法必须通过实例的引用来调用实例方法类成员包括类变量与类方法类成员包括类变量与类方法类成员不依赖于实例存在类成员不依赖于实例存在同一个类的不同实例共享同一个类变量,对类变量的改变会影响到所有实例同一个类的不同实例共享同一个类变量,对类变量的改变会影响到所有实例类变量的生存期不依赖于对象,其它类可以不用通过创建该类的实例,直接通过类名访问它们。同样,类变量的生存期不依赖于对象,其它类可以不用通过创建该类的实例,直接通过类
35、名访问它们。同样,类方法也可以直接通过类名访问。类方法也可以直接通过类名访问。68实例成员与类成员实例成员与类成员class ABCD char data;static int share_data;class Demo ABCD a,b,c,d;/实例化实例化69实例变量的引用实例变量的引用简单名称简单名称 当实例变量处在作用域内当实例变量处在作用域内(即对象的类的代码内即对象的类的代码内)的时候的时候 限定名称限定名称 objectReference.variableName objectReference.variableName 当实例变量处在作用域外时使用限定名称当实例变量处在作用域
36、外时使用限定名称System.out.println(Width of rect_one:+rect_one.width);System.out.println(Height of rect_one:+rect_one.height);int height=new Rectangle().height;70关于变量访问关于变量访问的说明的说明建议不要通过其它对象或类直接操作对象的变量建议不要通过其它对象或类直接操作对象的变量,可能引起无效值可能引起无效值理想情况下理想情况下,类会提供一些方法类会提供一些方法,其他对象可以通过他们检查或修改变量,确保值有效,而且如果变量的类其他对象可以通过他们检
37、查或修改变量,确保值有效,而且如果变量的类型和名称发生了变化,不会影响它的使用者型和名称发生了变化,不会影响它的使用者在某些情况下,可以允许对对象变量的直接访问,以使类更小更简单,也可使变量适用于更广泛范围;在某些情况下,可以允许对对象变量的直接访问,以使类更小更简单,也可使变量适用于更广泛范围;JAVAJAVA编程语言提供了一个访问控制机制,通过这种机制,类可以决定那些其它的类可以直接访问它的变量编程语言提供了一个访问控制机制,通过这种机制,类可以决定那些其它的类可以直接访问它的变量(第五章中介绍)。(第五章中介绍)。71调用对象的方法调用对象的方法使用限定名称来调用对象的方法使用限定名称来
38、调用对象的方法 objectReference.methodName(argumentList);或者objectReference.methodName();System.out.println(Area of rect_one:+rect_one.area();rect_two.move(40,72);int areaOfRectangle=new Rectangle(100,50).area();72关于方法调用关于方法调用方法被声明为方法被声明为publicpublic,就可以被任何其它的类所访问。有时,类需要限制对它的方法的访问,就可以被任何其它的类所访问。有时,类需要限制对它的方法
39、的访问类可以使用与控制变量访问相同的机制来对它的方法进行访问控制(第五章中介绍)类可以使用与控制变量访问相同的机制来对它的方法进行访问控制(第五章中介绍)73对象的清除对象的清除JAVAJAVA运行时环境在当对象不再被使用的时候清除它们,这个过程就是所谓的运行时环境在当对象不再被使用的时候清除它们,这个过程就是所谓的“垃圾收集垃圾收集”(garbage garbage collectioncollection)JavaJava的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作为垃圾的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作
40、为垃圾收集起来并释放。收集起来并释放。垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用System.gc()System.gc()要求进行垃圾收集时,垃圾要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。74无用对象的判定无用对象的判定当某个对象不在被任何引用变量引用时,该对象是无用对象,将被清除。一般有如下两种情况:当某个对象不在被任何引用变量引用时,该对象是无用对象,将被清除。一般有如下两种情况:引用变量超出了作用域引用变量超出了
41、作用域 StringBuffer s=newStringBuffer(“thisisatest”);/超出对象作用域引用变量引用了其它对象或引用了空对象引用变量引用了其它对象或引用了空对象StringBuffer s=new StringBuffer(“test1”);s=new StringBuffer(“test2”);/引用了新的对象 s=null;/引用为空75finalize()finalize()方法方法在对对象进行垃圾收集前,在对对象进行垃圾收集前,JavaJava运行时系统会自动调用对象的运行时系统会自动调用对象的finalize()finalize()方法来释放系统资源。方法
42、来释放系统资源。某些情况下,程序员可能需要实现该方法来释放不由垃圾收集器所控制的资源。但这种情况非常少见某些情况下,程序员可能需要实现该方法来释放不由垃圾收集器所控制的资源。但这种情况非常少见finalize()finalize()方法是在方法是在ObjectObject中有缺省实现,在用户自定义的类中,它可以被覆盖,但一般在最后要调用父中有缺省实现,在用户自定义的类中,它可以被覆盖,但一般在最后要调用父类的类的finalize()finalize()方法来清除对象所使用的所有资源方法来清除对象所使用的所有资源76问题一问题一下列程序的运行结果?public class SomethingIs
43、Wrong public static void main(String args)Rectangle myRect;myRect.width=40;myRect.height=50;System.out.println(myRects area is +myRect.area();77问题二问题二现有一个现有一个PointPoint和和RectangleRectangle对象,代码执行后有多少引用指向它们?有没有对象需要垃圾收集?对象,代码执行后有多少引用指向它们?有没有对象需要垃圾收集?Point point=new Point(2,4);Rectangle rectangle=new R
44、ectangle(point,20,20);point=null;78字符和字符串字符和字符串Java APIJava API提供了三个处理字符数据的类:提供了三个处理字符数据的类:CharacterCharacter:这个类的实例可以容纳单一的字符数值。该类还定义了一些简洁的方法来操作或者检:这个类的实例可以容纳单一的字符数值。该类还定义了一些简洁的方法来操作或者检查单一字符数据。查单一字符数据。StringString:这个类用于处理由多个字符组成的不可变数据。:这个类用于处理由多个字符组成的不可变数据。StringBufferStringBuffer:这个类用于存储和操作由多个字符组成的
45、可变数据。:这个类用于存储和操作由多个字符组成的可变数据。79字符类(字符类(CharacterCharacter)字符类的对象包含单个字符值字符类的对象包含单个字符值当需要使用对象时,可以用字符对象替代原始的当需要使用对象时,可以用字符对象替代原始的charchar类型的变量类型的变量80字符类字符类构造器和方法Character(char)Character(char)CharacterCharacter类唯一的构造器,它创建一个字符对象,其中包含由参数提供的值,一旦创类唯一的构造器,它创建一个字符对象,其中包含由参数提供的值,一旦创建了建了CharacterCharacter对象,它包含
46、的值就不能改变。对象,它包含的值就不能改变。compareTo(Character)compareTo(Character)这个实例方法比较两个字符对象包含的值,这个方法返回一个整数值,表示当前这个实例方法比较两个字符对象包含的值,这个方法返回一个整数值,表示当前对象中的值是大于、等于还是小于参数所包含的值对象中的值是大于、等于还是小于参数所包含的值81字符类字符类构造器和方法equals(Object)equals(Object)这个实例方法比较当前对象包含的值与参数对象包含的值,如果两个对象包含的值相等,这个实例方法比较当前对象包含的值与参数对象包含的值,如果两个对象包含的值相等,那么这个
47、方法返回那么这个方法返回truetruetoString()toString()这个实例方法将此对象转换为字符串这个实例方法将此对象转换为字符串charValue()charValue()这个实例方法以原始这个实例方法以原始charchar值的形式返回此字符对象包含的值值的形式返回此字符对象包含的值isUpperCase()isUpperCase()这个实例方法判断一个原始这个实例方法判断一个原始charchar值是否是大写字母值是否是大写字母82字符类字符类例程例程public class CharacterDemo public static void main(String args)C
48、haracter a=new Character(a);Character a2=new Character(a);Character b=new Character(b);int difference=pareTo(b);if(difference=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
49、.println(The character +a.toString()+is +(Character.isUpperCase(a.charValue()?upper:lower)+case.);程序的输出:程序的输出:a is less than b.a is equal to a2.The character a is lowercase.83字符类字符类类方法类方法84问题问题Character a=new Character(a);Character b=new Character(a);下列下列booleanboolean表达式的值是表达式的值是truetrue还是还是false?f
50、alse?(1 1)pareTo(b)=pareTo(b)=0(2 2)a.equals(b)a.equals(b)(3 3)a=ba=b85字符串和字符串缓冲区JavaJava平台提供两个类平台提供两个类StringString和和StringBufferStringBuffer,它们用于存储和操作字符串由多个字符组成的字符数据。,它们用于存储和操作字符串由多个字符组成的字符数据。StringString类用于其值不能改变的字符串;类用于其值不能改变的字符串;StringBufferStringBuffer类用于被修改的字符串,通常用来动态的构造字符数据。类用于被修改的字符串,通常用来动态的