《Java程序设计课件Java程序设计 (2).pdf》由会员分享,可在线阅读,更多相关《Java程序设计课件Java程序设计 (2).pdf(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java语言程序设计(第2版)1第 2 章 类与对象(一)BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
2、MMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学目录面向对象方法的特性类与对象基础对象初始化和回收枚举类型应用举例3BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学面向对象方法的特性抽象、封装、继承、多态4BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
3、BBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类与对象基础类的声明对象的创建数据成员方法成员包类的访问权限控制类成员的访问权限控制5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
4、MMMMMMMMJava语言程序设计(第2版),郑莉,清华大学对象初始化和回收构造方法内存回收6BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学枚举类型简单枚举类型枚举类7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMM
5、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学应用举例8BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学 抽象、封装、继承、多态9BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
6、BBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学抽象 忽略问题中与当前目标无关的方面 只关注与当前目标有关的方面10BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言
7、程序设计(第2版),郑莉,清华大学例:钟表 数据(属性)int Hour;int Minute;int Second;方法(行为)SetTime();ShowTime();11BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学封装 封装是一种信息隐蔽技术12BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
8、BBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学封装 利用抽象数据类型将数据和基于数据的操作封装在一起;用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的;封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节。13BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMM
9、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学继承 基于已有类产生新类的机制14BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学继承 是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为
10、已有类的子类(也称为派生类);在继承过程中子类继承了超类的特性,包括方法和实例变量;子类也可修改继承的方法或增加新的方法;有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量。15BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 单继承 一个子类只有单一的直接超类。多继承 一个子类可以有一个以上的直接超类。
11、Java语言仅支持单继承。16BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学多态 超类及其不同子类的对象可以响应同名的消息,具体的实现方法却不同;主要通过子类对父类方法的覆盖来实现。17BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMM
12、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学类与对象基础18BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类与对象的关系 类是对一类对象的描述;对象是类的具体实例。19BBBBBBBBBB
13、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类声明20BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言
14、程序设计(第2版),郑莉,清华大学类声明public abstract|final class 类名称extends 父类名称 implements 接口名称列表 数据成员声明及初始化;方法声明及方法体;21BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 class 表明其后声明的是一个类。extends 如果所声明的类是
15、从某一父类派生而来,那么,父类的名字应写在extends之后 implements 如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后 public 表明此类为公有类 abstract 指明此类为抽象类 final 指明此类为终结类22BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:钟表类public class Clock /变量成员in
16、t hour;int minute;int second;/方法成员public void setTime(int newH,int newM,int newS)hour=newH;minute=newM;second=news;public void showTime()System.out.println(hour+:+minute+:+second);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
17、MMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学对象声明与创建 创建类的实例(对象),通过对象使用类的功能。24BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学对象引用声明 语法类名 引用变量名;例 Clock是已经声明的类名,声明引用变量aclock,用于存储该类对象的引用:Clock a
18、clock;声明一个引用变量时并没有生成对象。25BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学对象的创建 语法形式:new()例如:aclock=new Clock()new的作用是:在内存中为Clock类型的对象分配内存空间;返回对象的引用。引用变量可以被赋以空值例如:aclock=null;26BBBBBBBBBBB
19、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学27BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第
20、2版),郑莉,清华大学数据成员表示对象的状态可以是任意的数据类型(简单类型,类,接口,数组等括号内文字不显示)28BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学数据成员声明 语法形式public|protected|private static finaltransient volatile数据类型 变量名1=变量初值,变
21、量名2=变量初值,;说明 public、protected、private 为访问控制符。static指明这是一个静态成员变量(类变量)。final指明变量的值不能被修改。transient指明变量是不需要序列化的。volatile指明变量是一个共享变量。29BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学实例变量 没有st
22、atic修饰的变量(数据成员)称为实例变量;存储所有实例都需要的属性,不同实例的属性值可能不同;可通过下面的表达式访问实例属性的值.30BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:圆类 圆类保存在文件Circle.java 中,测试类保存在文件ShapeTester.java中,两文件放在相同的目录下public class Circle int radius;
23、public class ShapeTester public static void main(String args)Circle x;x=new Circle();System.out.println(x);System.out.println(radius=+x.radius);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM运行结果 编译后运行结果如下:Cir
24、cle26b249radius=0 说明默认的toString()返回:getClass().getName()+”+Integer.toHexString(hashCode()BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:矩形类矩形类保存在Rectangle.java中,测试类保存在ShapeTester.java中,两文件保存在相同目录下public clas
25、s Rectangle double width=10.128;double height=5.734;public class ShapeTester public static void main(String args)Circle x;Rectangle y;x=new Circle();y=new Rectangle();System.out.println(x+y);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
26、MMMMMMMMMMMMMMMMMMMMMMMMMMMMM运行结果 编译后运行结果如下:Circle82f0db Rectangle92d342 说明Circle及Rectangle类对象的状态如图BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类变量 为该类的所有对象共享(不显示)35BBBBBBBBBBBBBBBBBBB
27、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类变量(静态变量)用static修饰。在整个类中只有一个值。类初始化的同时就被赋值。适用情况 类中所有对象都相同的属性。经常需要共享的数据。系统中用到的一些常量值。引用格式.36BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMM
28、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:具有类变量的圆类public class Circle static double PI=3.14159265;int radius;当我们生成Circle类的实例时,在每一个实例中并没有存储PI的值,PI的值存储在类中。BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
29、MMMMMMMMMMMMMMMMMMMM对类变量进行测试public class ClassVariableTester public static void main(String args)Circle x=new Circle();System.out.println(x.PI);System.out.println(Circle.PI);Circle.PI=3.14;System.out.println(x.PI);System.out.println(Circle.PI);运行结果:3.141592653.141592653.143.14BBBBBBBBBBBBBBBBBBBBBBB
30、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学分为实例方法和类方法39BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版
31、),郑莉,清华大学语法形式public|protected|private static finalabstract native synchronized返回类型 方法名(参数列表)throws exceptionList方法体40BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 public、protected、priv
32、ate 控制访问权限。static指明这是一个类方法(静态方法)。final指明这是一个终结方法。abstract指明这是一个抽象方法。native用来集成java代码和其它语言的代码(本课程不涉及)。synchronized用来控制多个并发线程对共享数据的访问。41BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 返回类型
33、 方法返回值的类型,可以是任意的Java数据类型;当不需要返回值时,返回类型为void。参数类型 简单数据类型、引用类型(数组、类或接口);可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数。方法体 方法的实现;包括局部变量的声明以及所有合法的Java语句;局部变量的作用域只在该方法内部。throws exceptionList 抛出异常列表。42BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
34、MMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学实例方法 表示特定对象的行为;声明时前面不加static修饰符;43BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学实例方法调用 给对象发消息,使用对象的某个行为/功能:调用对象的某个方法。44BBBBBBBBBBBBBBBBBBBBBBBBB
35、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 实例方法调用格式.(参数列表)为消息的接收者。参数传递 值传递:参数类型为基本数据类型时 引用传递:参数类型为对象类型或数组时45BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
36、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:具有实例方法的圆类public class Circle static double PI=3.14159265;int radius;public double circumference()return 2*PI*radius;public void enlarge(int factor)radius=radius*factor;public boolean fitsInside(Rectangle r)return(2*radius r.width)&(2*radius r.height);BBBBBBB
37、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM圆类的测试类public class InsideTester public static void main(String args)Circle c1=new Circle();c1.radius=8;Circle c2=new Circle();c2.radius=15;Rectangle r=new Rectangle();r.
38、width=20;r.height=30;System.out.println(Circle 1 fits inside Rectangle:+c1.fitsInside(r);System.out.println(Circle 2 fits inside Rectangle:+c2.fitsInside(r);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM运行结果C
39、ircle 1 fits inside Rectangle:trueCircle 2 fits inside Rectangle:falseBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类方法 表示类中对象的共有行为49BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
40、BBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学类方法 也称为静态方法,声明时前面需加static修饰。不能被声明为抽象的。可以类名直接调用,也可用类实例调用。50BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
41、MMMMM例:温度转换 将摄氏温度(centigrade)转换成华氏温度(fahrenheit)转换公式为fahrenheit=centigrade*9/5+32除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法转换方法centigradeToFahrenheit放在类Converter中public class Converter public static int centigradeToFahrenheit(int cent)return(cent*9/5+32);方法调用Converter.centigradeToFahrenheit(40)BB
42、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学52可变长参数BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
43、MMMMJava语言程序设计(第2版),郑莉,清华大学53可变长参数 可变长参数使用省略号表示,其实质是数组。例如,“String s”表示“String s”。对于具有可变长参数的方法,传递给可变长参数的实际参数可以是零个到多个对象。BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:可变长参数static double maxArea(Circle c,Rectan
44、gle.varRec)Rectangle rec=varRec;for(Rectangle r:rec)/public static void main(String args)Circle c=new Circle();Rectangle r1=new Rectangle();Rectangle r2=new Rectangle();System.out.println(max area of c,r1 and r2 is +maxArea(c,r1,r2);System.out.println(max area of c and r1 is +maxArea(c,r1);System.ou
45、t.println(max area of c and r2 is +maxArea(c,r2);System.out.println(max area of only c is +maxArea(c);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学55BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
46、BBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学 包是一组类的集合 一个包可以包含若干个类文件,还可包含若干个包56BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava
47、语言程序设计(第2版),郑莉,清华大学包的作用 将相关的源代码文件组织在一起。类名的空间管理,利用包来划分名字空间可以避免类名冲突。提供包一级的封装及存取权限。57BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学包的命名 每个包的名称必须是“独一无二”的。Java中包名使用小写字母表示。命名方式建议 将机构的Internet
48、域名反序,作为包名的前导;若包名中有任何不可用于标识符的字符,用下划线替代;若包名中的任何部分与关键字冲突,后缀下划线;若包名中的任何部分以数字或其他不能用作标识符起始的字符开头,前缀下划线。58BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学编译单元 一个Java源代码文件称为一个编译单元59BBBBBBBBBBBBBBB
49、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学编译单元 一个Java源代码文件称为一个编译单元,由三部分组成:所属包的声明(省略,则属于默认包);Import(引入)包的声明,用于导入外部的类;类和接口的声明。一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class
50、文件。60BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学包的声明 命名的包(命名的包(Named Packages)例如:package Mypackage;默认包(未命名的包)默认包(未命名的包)不含有包声明的编译单元是默认包的一部分。61BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB