第3章Java面向对象编程基础.ppt_第1页
第3章Java面向对象编程基础.ppt_第2页
第3章Java面向对象编程基础.ppt_第3页
第3章Java面向对象编程基础.ppt_第4页
第3章Java面向对象编程基础.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 Java面向对象编程基础,3.1面向对象软件开发概述 3.2 Java的类 3.3 Java的非访问控制符 3.4 Java的访问控制符 3.5 定义和使用Java的方法,学习要点:,1.理解面向对象程序设计的基本概念 2.理解Java包中类的基本概念,掌握定义Java类和创建对象的方法 3.掌握构造函数:构造函数的特点、构造函数的定义 4.掌握Java的访问控制符:public、private、protected、private protected 5.掌握Java的非访问控制符:static、abstract、final 6.理解方法的形式参数与实际参数、方法的返回值、方法的调用过

2、程,面向对象是一种新兴的程序设计方法, 或者是一种新的程序设计规范, 其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。,3.1 面向对象软件开发概述,图2.1 对象、实体与类,3.1.1 程序设计方法的发展,3.1.2 面向对象的几个基本概念,类(Class) 是定义了对象特征以及对象外观和行为的模板,是同种对象的集合与抽象。类是一种抽象数据类型。 对

3、象(Object) 是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现,是具有唯一对象名和固定对外接口的一组属性和操作的集合,是类的一个实例,具有所在类所定义的全部属性和方法。 属性(Property) 是对象的特征,包括状态和行为。,属性,动态属性也叫行为,在计算机内用方法表示,静态属性也叫状态,在计算机内用变量表示,对象的关系 包含当对象A是对象B的属性时,称对象B包含对象A; 如:学生和班级, CPU与计算机 继承当对象A是对象B的特例时,称对象A继承了对象B 如:北京大学和大学,液晶显示器和显示器。 关联当对象A的引用是对象B的属性时,称对象A和对象 B之间是关联关系。 如计算机

4、与制造商,学生和班主任 方法(Method)与对象相联系的由程序执行的一个处理过程 ,类似于面向过程中的函数。 事件(Event)由对象识别的一个动作。 面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类和对象是面向对象程序设计技术的核心。,继承性(inheritance),自动地共享具有层次关系的类(子类)和对象中的方法和数据的机制。 当类Y继承类X时,就表明类Y是类X的子类,而类X是类Y的超/父类。类Y由两部分组成:继承部分和增加部分。 增加部分是专为Y编写的新代码;继承部分可以是简单的等同,也可以更为丰富:如对性质重命名、重实现、复制、置空等。,继承方式: 简单继承(singl

5、e inheritance):一个类至多只能继承一个 类(树结构)。 多重继承(multiple inheritance):一个类直接继承多个超 类(网状结构)。,例:一个图形系统(),Figure,Line,Ellipse,Polygon,Close Figure,Open Figure,Pentagon,Triangle,Rectangle,Circle,Arc,(象素宽度,颜色,平移,旋转),(填充,边界,周长,面积),(长度),3. 1.3 面向对象的软件开发过程,面向对象的软件开发过程可以大体划分为三个阶段: 面向对象的分析(object oriented analysis,OOA)

6、 面向对象的设计(object oriented design,OOD) 面向对象的实现(object oriented programming,OOP)。,(1) 面向对象的分析(OOA object oriented analysis),主要作用: 明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型,即OOA模型。分析阶段的工作应该由用户和开发人员共同协作完成。 面向对象的分析首先应该明确用户的需求,然后再将这些需求以标准化模型的形式规范地表述出来,即将用户和开发人员头脑中形成的需求以准确的文字、图表等形式表述出来,形成双方都认可的文件。,使用OOA

7、的原因如下: (1)它使我们能在人类概括客观事物的三个基本方法(对象及属性、一般特殊结构和部分整体结构)的框架上进行定义和交流。 (2)它首先着眼于问题空间的理解。 (3)它将属性及专用于那些属性的方法视为一个固有的整体。 (4)使用自包含分块(对象之间依赖性最小)进行分析和说明。 (5)它提供一个支持分析和设计一致的强有力的表示工具。 (6)它能适应系列变化的系统和对当前实际运行系统的调整。,常使用的OO(描述)方法有多种:,Booch Booth 方法 (86年) Coad 声明类属性为对象的语法: 修饰符 类名 对象名=new 类名(实际参数列表); 例: PhoneCard myCar

8、d=new PhoneCard ( ); 修饰符有访问控制符、静态修饰符static、 最终修饰符final、易失修饰符volatile和 过渡修饰符transient。,类的方法:,即成员函数,它规定类属性上的操作,实现类的内部功能的机制,是类与外部交互的窗口。 语法结构: 修饰符 返回值类型 方法名(参数列表) throws 例外名1,例外名2,. 方法体; 局部变量声明; 语句序列; ,类中的“变量”概念辨析:,(1)成员变量: 在类体变量定义处定义的变量,在整个类内都有效; 成员变量包括实例变量和类变量,用static定义的变量是类变量,也叫静态变量; 所有对象独享实例变量,但共享类变

9、量; 实例变量只能通过对象名访问,类变量既可以通过某个对象名也可以通过类名来访问。 (2)局部变量: 在类的方法中定义的变量,仅在定义它的方法内有效,类中的“方法”概念辨析:,(1)实例方法: 实例方法既可以操作实例变量,也可以操作类变量; 实例方法在创建类对象后才分配入口地址; 实例方法可以被类创建的任何对象访问,必须通过对象来调用;实例方法可以调用其它方法(包括类方法)。 (2)类方法: 用static修饰的方法是类方法,也叫静态方法; 类方法只能操作类变量; 类方法在类被加载到内存后就分配了入口地址; 类方法可以被类创建的任何对象调用,也可以通过类名来调用,类方法只能调用该类的类方法。,

10、本类中方法与变量之间的访问关系,各类之间方法与属性的引用方法,class PhoneCard /定义一个电话卡类 long cardNumber; private int password; double balance; String connectNumber; boolean connected; boolean performConnection(long cn,int pw) /方法1,实现连接 if(cn = cardNumber ,类的属性,double getBalance() /方法2,返回余额 if(connected) return balance; else retur

11、n -1; void performDial() /方法2,实现拨号 if(connected) balance -= 0.5; ,3.2.5 创建类的实例对象,创建对象的一般格式: 类名 新建对象名= new 构造函数( ); new是为新建对象开辟内存空间的算符。 构造函数()用来完成对象的初始化。 如:TextField input= new TextField(6); 建立一个名为input、长度为6的文本框。 PhoneCard myCard=new PhoneCard( ); 建立一个名为myCard的电话卡对象。,3.2.6 Java中的构造函数,(1)基本概念 构造函数:用来初

12、始化对象(为其所有静态属性赋初值)的一个特殊方法。 构造函数名与类名相同 构造函数可以有0个或多个参数 特点 构造函数始终和new关键字一起调用 构造函数没有返回值 构造函数一般不能由编程人员显示地直接调用 在创建一个类的新对象时,系统自动调用构造 函数对其进行初始化。,引入构造函数的原因: 1) 满足面向对象程序设计中对象初始化的需要; 2) 提高灵活度,使初始化工作除赋值外有更复杂的操作; 在不定义构造函数时,系统会自动为该类生成一个默认的构造函数。,(2)构造函数的定义,例如,可以为PhoneCard类定义如下的构造函数,初始化它的几个域。 PhoneCard(long cn, int

13、pw, double b,String s) cardNumber = cn; password = pw; balance = b; connectNumber = s; connected = false; 可见,构造函数定义了几个形式参数,创建对象的语句在调用构造函数时,需要提供几个类型、顺序一致的实际参数,指明新建对象各域的初始值。,构造函数的调用是在用new运算符创建类对象时由系统自动完成。 定义了构造函数之后,就可以用如下的语句创建并初始化PhoneCard对象: PhoneCard newCard = new PhoneCard (33006655, 6666, 100.0,30

14、0); 说明: newCard是新建对象名 关键字new通知系统开辟内存单元,创建运算符 第一个PhoneCard说明新对象属于哪个类 第二个PhoneCard用来隐含调用PhoneCard类的构造函数 这个对象的卡号是33006655,密码是6666,金额是100.0,电话卡的接入号码是字符串“300”。,例 UsePhoneCard.java 1: public class UsePhoneCard 2: 3: public static void main(String args) 4: / 创建一个PhoneCard的对象myCard 5: PhoneCard myCard = new

15、 PhoneCard(12345678,1234,50.0,300); / 调用myCard的方法toString( ), / 把myCard中的各个域数据组合成一段信息在屏幕上输出。 6: System.out.println(myCard. toString( ) ); 7: 8: ,9: class PhoneCard 10: 11: long cardNumber; 12: private int password; 13: double balance; 14: String connectNumber; 15: boolean connected; 16: /构造函数 17: Ph

16、oneCard(long cn, int pw, double b,String s) 18: 19: cardNumber = cn; 20: password = pw; 21: if ( b 0 ) 22: balance = b; 23: else 24: System.exit(1);,25: connectNumber = s; 26: connected = false; 27: 28: boolean performConnection(long cn,int pw) 29: /方法1,实现连接 30: if(cn = cardNumber 39: 40: ,41: doubl

17、e getBalance( ) /方法2,返回余额 42: 43: if(connected) 44: return balance; 45: else 46: return -1; 47: 48: void performDial( ) /方法3 ,拨号扣款 49: 50: if(connected) 51: balance -= 0.5; 52: ,53: public String toString( ) /方法4,显示卡上的信息 54: 55: String s = 电话卡接入号码:+connectNumber 56: +n电话卡卡号:+cardNumber 57: +n电话卡密码:+

18、password 58: +n剩余金额:+balance; 59: if(connected) 60: return (s + n电话已接通。); 61: else 62: return (s + n电话未接通。); 63: 64: ,3.3 Java的非访问控制符,Java的非访问控制符 static 静态修饰符 修饰属性和方法 abstract 抽象修饰符 修饰类和方法 final 最终修饰符 修饰类、属性和方法 3.3.1 静态属性、静态方法与静态初始化器 static是静态修饰符。 ()静态属性 被static修饰的属性不属于任何一个类的具体对象,是公共的存储单元。任何对象访问它时,取

19、到的都是相同的数值。静态属性是类属性。 当需要引用或修改一个static限定的类属性时,可以使用类名,也可以使用某一个对象名,效果相同。,()静态方法,用static修饰符修饰的方法,是属于整个类的方法。 例如,在PhoneCard200中如果需要修改附加费,可以定义一个静态方法setAdditory( ): static void setAdditory ( double newAdd) if(newAdd 0) additoryFee = newAdd; 用static修饰的方法的含义: 1)调用这个方法时应该使用类名做前缀,不用某个具体的对象名; 2)该方法属于整个类,它在内存中的代码段

20、随着类的定义而分配和装载; 3)该方法不能操纵属于某个对象的成员变量,即static方法只能处理static属性。,(3)静态初始化器,直接用static 当名字、用 包起来的一段特殊代码。与构造函数类似,完成初始化工作,但两者的区别是: 静态初始化器对每个类初始化,构造函数对每个新创建的对象初始化。 静态初始化器在所属的类加载入内存时由系统调用运行,构造函数则在产生新对象时由系统自动执行。 静态初始化器不是方法,没有方法名、返回值和参数列表。 总之,静态初始化器对整个类完成初始化操作,包括给static类成员赋初值。,例 TestStatic.java,/测试静态属性、静态方法与静态初始化器

21、的综合例题 public class TestStatic public static void main(String args) PhoneCard200 my200_1 = new PhoneCard200(100.0); PhoneCard200 my200_2 = new PhoneCard200(200.5); /测试静态初始化器 System.out.println(第1张200卡的卡号:+my200_1.cardNumber); System.out.println(第1张200卡的金额:+my200_1.balance); System.out.println(第1张200卡

22、的附加费:+my200_1.additoryFee); System.out.println(第1张200卡的密码:+my200_1.password); System.out.println(第2张200卡的卡号:+my200_2.cardNumber); System.out.println(第2张200卡的金额:+my200_2.balance); System.out.println(第2张200卡的附加费:+my200_2.additoryFee); System.out.println(第2张200卡的密码:+my200_2.password);,System.out.printl

23、n(-直接操作修改静态属性:测试静态属性); my200_1.additoryFee = 0.4; /直接操作修改对象的静态属性,可以实现对类和其它同类对象同一属性的修改 System.out.println(第2张200卡的附加费:+my200_2.additoryFee); System.out.println(200卡类的附加费:+PhoneCard200.additoryFee); System.out.println(第1张200卡类的附加费:+my200_1.additoryFee); System.out.println(-调用静态方法修改静态属性:测试静态方法); PhoneC

24、ard200.setAdditory(0.6); /调用静态方法修改类的静态属性,可以实现其所有同类对象同一属性的修改 System.out.println(“修改后第1张200卡类的附加费: + my200_1.additoryFee); System.out.println(修改后第2张200卡的附加费:+ my200_2.additoryFee);,System.out.println(-测试修改密码的各种方法); my200_2.password=222; /用普通赋值法给对象的非静态属性赋值 System.out.println(第2张200卡的密码:+my200_2.passwor

25、d); /对该对象的非静态属性操作有效 System.out.println(第1张200卡的密码:+my200_1.password); /对其它同类对象的非静态属性操作无效 / PhoneCard200.password=333; /用普通赋值法给类的非属性赋值,编译不能通过 my200_2.changePwd(666); /调用类中的方法实现密码的修改 System.out.println(第2张200卡的密码:+my200_2.password); /对该对象的非静态属性操作有效 System.out.println(第1张200卡的密码:+my200_1.password); /对其

26、它同类对象的非静态属性操作无效 ,class PhoneCard200 /定义类:PhoneCard200 static long nextCardNumber; static String connectNumber = 200; static double additoryFee; /静态属性 long cardNumber ; int password=111; boolean connected; double balance; PhoneCard200(double bi) /构造函数 cardNumber = nextCardNumber+; balance=bi; static

27、/静态初始化器 nextCardNumber = 2001800001; additoryFee=0.2; ,static void setAdditory(double newAdd) /静态方法 if(newAdd0) additoryFee=newAdd; /password=6666; /静态方法不能操作非静态变量 int changePwd(int pwd) /普通方法 password=pwd; return pwd; ,3.3.2 抽象类与抽象方法,用abstract修饰的类或方法。 (1)抽象类 没有具体实例对象的类。 使用抽象类的优点就是可以充分利用公共属性来提高开发和维护程

28、序的效率。 例:我们以交通工具类作为例子,它代表了所有具体交通工具的共同属性,如速度、加速、减速等。,java语句可表述为: abstract class transportmeans float speed; /速度 void start() /启动 . void stop() /停止 . float speedUp(float increaseSpeed) /加速 . ,(2)抽象方法,用abstract声明的仅有方法头而没有具体的方法体和 操作实现的抽象方法。 方法体的具体实现由当前类的不同子类在各自的类定义中完成。 只能把abstract方法作为一个共同的接口。 所有的抽象方法必须存在

29、于抽象类中。 使用abstract方法可以隐藏具体的细节信息。,例 TestAbstract.java,public class TestAbstract /抽象类与抽象方法的使用 public static void main(String args) PhoneCard200 my200 = new PhoneCard200(50.0); /用PhoneCard200的构造函数初始化对象my200 PhoneCard200 my2002 = new PhoneCard200(60.0); /用PhoneCard200的构造函数初始化对象my2002 IC_Card myIC = new I

30、C_Card(50.0); /用IC_Card的构造函数初始化对象myIC System.out.println(200卡可以拨打 +my200.TimeLeft()+ 次电话。); System.out.println(IC 卡可以拨打 +myIC.TimeLeft()+ 次电话。); System.out.println(第1张200卡的卡号:+my200.cardNumber); System.out.println(第2张200卡的卡号:+my2002.cardNumber); System.out.println(第2张200卡可以拨打 +my2002.TimeLeft()+ 次电话

31、。); ,abstract class PhoneCard /抽象类 double balance; abstract void performDial(); /抽象方法,不需要定义方法体 / void performChangePwd(); /出错,要么加上abstract,要么定义方法体 double TimeLeft() /一般方法,需要定义方法体,计算可以拨打的次数 double current = balance; int times = 0; do performDial(); /调用抽象方法 times+; while(balance=0); balance = current;

32、 return times-1; ,class PhoneCard200 extends PhoneCard static long nextCardNumber; static final String connectNumber = 200; static double additoryFee; long cardNumber ; int password; boolean connected; static /静态初始化器,初始化类 nextCardNumber = 2001800001; additoryFee = 0.1; PhoneCard200(double ib) /Phone

33、Card200的构造函数 cardNumber = nextCardNumber+; balance = ib; void performDial() /子类PhoneCard200实现的抽象方法 balance -= 0.5+additoryFee; /abstract void performChange(); /出错,非抽象类不可以定义抽象方法 ,class IC_Card extends PhoneCard IC_Card(double ib) /IC_Card的构造函数 balance = ib; void performDial() /子类IC_Card实现的抽象方法 balanc

34、e -= 0.8; ,3.3.3 最终类、最终属性、最终方法,用final最终修饰符来修饰类、属性和方法。 (1)最终类不可能有子类 (2)最终属性(域)可用来修饰常量,若成员变量被声明为final,则整个执行过程中都不会变。 语法:static final double additoryFee=0.1; 注意: 需要说明常量的数据类型 需要同时指出常量的具体取值 为了节省空间,常量通常被声明为static,(3)最终方法功能和语句都不能被修改的最终方法,即不能被当前类的子类重载。目的是为了预防不必要的重复定义。 例:final double getAdditoryFee() return a

35、dditoryFee; 注意:所有已被private修饰符限定为私有的方法,以及所有包含在final类中的方法,都被缺省地认为是final的。,例:TestFinal.java,/最终类、最终方法、最终属性、终结器的综合例题 public class TestFinal public static void main(String args) PhoneCard200 my200_1 = new PhoneCard200(100.0); PhoneCard200 my200_2 = new PhoneCard200(200.5); System.out.println(第1张200卡的卡号:+

36、my200_1.cardNumber); System.out.println(第1张200卡的金额:+my200_1.balance); System.out.println(第1张200卡的附加费:+my200_1.additoryFee); System.out.println(第1张200卡的密码:+my200_1.getAdditoryFee(); System.out.println(第2张200卡的卡号:+my200_2.cardNumber); System.out.println(第2张200卡的金额:+my200_2.balance); System.out.println

37、(第2张200卡的连接号:+my200_2.connectNumber); my200_1.setAdditory(0.9); System.out.println(修改后第2张200卡的连接号:+my200_2.connectNumber); /my200_1.additoryFee = 0.4; /出错,不能给对象的最终属性赋值 /PhoneCard200.setAdditory(0.6); /出错,不能修改对象的最终属性 IC_Card myIC = new IC_Card(50.0); System.out.println(IC 卡可以拨打 +myIC.TimeLeft()+ 次电话。

38、); ,final class PhoneCard /定义为final 最终类,则下面的IC卡不能定义为其子类 ,若定义为抽象类 ,IC卡可以为子类 double balance; /abstract void performDial(); /final中不能定义抽象方法 double TimeLeft() /一般方法,需要定义方法体,计算可以拨打的次数 double current = balance; int times = 0; do /performDial(); /不能调用该方法 times+; while(balance=0); balance = current; return

39、times-1; ,class PhoneCard200 /定义类:PhoneCard200 static long nextCardNumber; static String connectNumber = 200; static final double additoryFee=0.5; /静态最终属性,被赋值后就不可以再修改 /这里如果不赋值,可以在静态初始化器中修改 long cardNumber ; int password=222; boolean connected; double balance; PhoneCard200(double bi) /构造函数 cardNumber

40、 = nextCardNumber+; balance=bi; static /静态初始化器 nextCardNumber = 2001800001; /additoryFee=0.2; /出错,如果定义时没有赋初值才可以 ,static void setAdditory(double newAdd) /静态方法 if(newAdd0) /additoryFee=newAdd; /不能操作最终变量 connectNumber = 300; final double getAdditoryFee() /最终方法 return additoryFee; void performDial() /Ph

41、oneCard200的方法 balance -= 0.5+additoryFee; /*class IC_Card extends PhoneCard /PhoneCard被定义为final则不能有子类 IC_Card(double ib) /IC_Card的构造函数 balance = ib; void performDial() /子类IC_Card的方法 balance -= 0.8; */,3.4 Java的访问控制符,3.4.1 Java的访问控制符种类 public 公共的,修饰类、属性和方法 private 私有的,修饰属性和方法 protected 受保护的,修饰属性和方法 p

42、rivate protected 私有受保护的,修饰属性和方法 无符号的缺省定义 友好的, 修饰类、属性和方法 作用: 限定类、属性和方法被程序里的其他部分访问和调用,3.4.2 语法结构,修饰符1、修饰符2.修饰符N class 类名. 修饰符1、修饰符2.修饰符N 数据类型 属性名 修饰符1、修饰符2.修饰符N 方法返回值类型 方法名(形式参数列表),3.4.3 访问控制符的特点 公共访问控制符 public可以被所有其他类所访问和引用。但对类而言,其中包含的域和方法能否被访问看自身的访问控制符是否也为public。 缺省访问控制符规定该类只能被同一包中的类访问和引用,称之为包访问性;类中

43、的域和方法若也没有访问控制符来限定,则同样具备包访问性。 私有访问控制符 private只能被该类自身所访问和修改,不能被任何其他类(包括子类)获取和引用。,保护访问控制符 protected只能被该类自身与它在同一个包中的其他类、在其他包中该类的子类引用,其主要作用是允许其他包中的它的子类来访问父类的特定属性。 私有保护访问控制符 private protected可以被该类本身和该类的所有子类引用,类、属性和方法的访问控制,A:所有类,B:包中的类,D:本类,C:所有 子类,E:包中 子类,例:AccessControl.java,/测试访问控制符的使用 import java.apple

44、t.Applet; import java.awt.*; public class AccessControl extends Applet / 定义主类,在浏览器中显示信息 ClassBeAccessed c = new ClassBeAccessed(); /创建被访问使用类的对象(区域D) subClass sc = new subClass(); /创建被访问类子类的对象(区域C) PackageClass ic = new PackageClass(); /创建被访问类同一包中类的对象(区域B) public void paint(Graphics g) /显示可访问信息 g.dra

45、wString(Self Accessible:,10,20); /类可以访问自己的所有属性和方法 g.drawString(c.toString(),20,35); g.drawString(Sub Accessible:,10,55); /子类可以直接访问父类的哪些属性 g.drawString(sc.AccessDirectly(),20,70); g.drawString(Package Accessible:,10,90); /同包中的类可以访问哪些属性 g.drawString(ic.AccessDirectly(),20,105); g.drawString(Access usi

46、ng public method:,10,125); /通过调用被访问类的 g.drawString(sc.AccessCls(),20,140); /公共方法来访问它的 g.drawString(ic.AccessCls(),20,155); /所有性质的属性 ,class ClassBeAccessed/被访问类是非公共类,同一包中的其他类都可创建其对象 public String m_PublicProperty; /公共属性 String m_FriendlyProperty; /缺省属性(又称为友元) protected String m_ProtectedProperty; /保护

47、属性 private String m_PrivateProperty; /私有属性 ClassBeAccessed()/构造函数,为各属性赋初值 m_PublicProperty = new String(Public); m_FriendlyProperty = new String(Friendly); m_ProtectedProperty = new String(Protected); m_PrivateProperty = new String(Private); public String toString()/公共方法:连接各属性的字符串并显示 return(m_Public

48、Property + ; + m_FriendlyProperty + ; + m_ProtectedProperty + ; + m_PrivateProperty + ;); ,class subClass extends ClassBeAccessed/被访问类的子类 ClassBeAccessed c = new ClassBeAccessed();/创建被访问类的对象 String AccessDirectly() /直接调用被访问类的属性,可调用的有: return(c.m_PublicProperty + ; /公共属性 +c.m_FriendlyProperty + ; /缺省

49、属性 +c.m_ProtectedProperty + ; );/保护属性 String AccessCls() /通过调用被访问类的公共方法,可以调用它的各种性质的属性 return(c.toString(); class PackageClass /与被访问类在同一个包中的类 ClassBeAccessed c = new ClassBeAccessed();/创建被访问类的对象 String AccessDirectly() /直接调用被访问类的属性,可调用的有: return(c.m_PublicProperty + ; /公共属性 +c.m_FriendlyProperty + ;

50、/缺省属性 +c.m_ProtectedProperty + ; );/保护属性 String AccessCls() return(c.toString(); /通过调用被访问类的公共方法,可以调用它的各种性质的属性 ,3.4.4 其他修饰符及修饰符的混合使用,(1)volatile 易失域修饰符 可以同时被几个线程所控制和修改; 一般用于修饰接受外部输入的属性,如当前时间的变量由系统后台线程修改; (2)native 本地方法修饰符 用来声明用其他语言书写方法体并具体实现方法功能的特殊的方法。 声明:native double CaculateTax(Employee emp); /调用C

51、+编写的CaculateTax模块 调用:Emp1.m_Tax=CaculateTax(Emp1); 目的是充分利用已经存在的程序功能模块和避免重复工作;要注意跨平台性能。,(3)synchronized 同步方法修饰符 用于多线程共存的程序中的协调和同步。 如果是一个类的方法(即static的方法),那么在系统调用执行前,将把系统类Class中对应当前类的对象加锁; 如果修饰的是一个对象的方法(未用static修饰的方法),则这个方法在被调用执行前,将把当前对象加锁。,(4)修饰符的混合使用,大多数情况下,修饰符是可以混合使用的。 例如:public abstract class trans

52、portmeans. 但有以下例外: abstract不能与final并列修饰同一个类; abstract不能与private、static、final、native并列修饰同一个方法; abstract类中不能有private的成员(包括属性和方法); abstract方法必须在abstract类中; static方法中不能处理非static的属性。,3.5 定义和使用Java的方法,回顾: Java程序的基本结构 引入Java类库; 定义用户类n 定义类n的若干变量或对象; 定义类n的方法1; 定义类n的方法2; . 定义类n的方法M1; ,3.5.1 定义方法 Java中,方法只能在类中定义,由方法头和 方法体两部分组成。 格式: 修饰符 返回值类型 方法名(参数列表) throws 例外名1,例外名2,. 局部变量/对象

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论