




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第二二章章类与对象的基本概念类与对象的基本概念Java2Java2实用教程实用教程-4.2-4.12-4.2-4.12JAVA语言程序设计JAVA语言程序设计清华大学 郑莉2目录目录2.1 面向对象的程序设计方法概述面向对象的程序设计方法概述2.2 类与对象类与对象 2.3 对象初始化和回收对象初始化和回收 2.4 应用举例应用举例 2.6 本章小节本章小节JAVA语言程序设计清华大学 郑莉32.1 面向对象的程序设计方法概述面向对象的程序设计方法概述l面向对象的程序设计面向对象的程序设计 与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向 涉及的主要概念
2、l抽象l封装l继承l多态 JAVA语言程序设计清华大学 郑莉42.1 面向对象的程序设计方法概述面向对象的程序设计方法概述l面向对象的程序设计面向对象的程序设计 结构化程序设计l结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理 l结构化方法是围绕实现处理功能的“过程”来构造系统l用户的需求往往基于功能 面向对象的方法学认为世界由各种对象(数据和对数据操作)组成,任何事物都是对象,是某个类的实例,复杂的对象可由较简单的对象的某种方式组成 对象具有与现实世界的某种对应关系,正是利用这种关系对问题进行分解,与结构化程序设计方法相比,更符合人类认识
3、现实世界的思维方式 JAVA语言程序设计清华大学 郑莉5l对象对象 现实世界中l万物皆对象l都具有各自的属性,对外界都呈现各自的行为 程序中l一切都是对象l都具有标识 (identity), 属性和行为(方法) 通过一个或多个变量来保存其状态 通过方法(method) 实现他的行为2.1 面向对象的程序设计方法概述面向对象的程序设计方法概述(续续)JAVA语言程序设计清华大学 郑莉6l类类将属性及行为相同或相似的对象归为一类类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为在面向对象的程序设计中,每一个对象都属于某个特定的类类是面向对象程序设计的基本单位,程序运行时由类生产对象,对象
4、之间通过发送消息进行通信 类的四大特点:抽象、封装、继承、多态2.1 面向对象的程序设计方法概述面向对象的程序设计方法概述(续续)JAVA语言程序设计清华大学 郑莉72.1.1 抽象抽象l抽象抽象忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面l如:驾驶员更关心汽车的属性、行为,而汽车的内部构造则不用去关心计算机软件开发中所使用的抽象有l过程抽象:将系统的功能划分为若干部分,按照“自顶向下方式逐步求精”,强调功能完成的过程和步骤,隐藏具体实现l数据抽象:将系统中需要处理的数据和对数据的操作结合在一起,抽象成不同数据类型。面向对象程序设计主要特点就是采用了数据抽象的方法来构建
5、程序的类及对象class XiyoujiRenwu float height,weight; String head, ear,hand,foot, mouth; void speak(String s) System.out.println(s); public class Clock int hour, minute, second; public void setTime(int newH, int newM, int newS) hour = newH; minute = newM; second = newS; public showTime() System.out.print(h
6、our, minute, second); JAVA语言程序设计清华大学 郑莉8l例:例:钟表l数据(属性)int Hour; int Minute; int Second;l方法(行为)SetTime(); ShowTime();2.1.1 抽象抽象(续续)JAVA语言程序设计清华大学 郑莉9l例:例:人l数据(属性)char *name; char *gender; int age; int id;l方法(行为)生物行为Eat(), Step(),社会行为Work(), Study(),2.1.1 抽象抽象(续续)JAVA语言程序设计清华大学 郑莉102.1.2 封装封装l封装封装 是一种
7、信息隐蔽技术,与数据抽象密切相关 利用抽象数据类型将数据和基于数据的操作封装在一起用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的外界需要访问类里的数据需要通过接口进行封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象JAVA语言程序设计清华大学 郑莉11l封装的定义封装的定义 清楚的边界l所有对象的内部信息被限定在某个边界内 接口l对象向外界提供的方法,外界可以通过这些方法与对象进行交互 受保护的内部实现l功能的实现细节不能从类外访问。2.1.2 封装封装(续续)JAVA语言程序设计清华大学 郑莉12l封装的意义封装的意义
8、在面向对象的程序设计中,类封装了数据及对数据的操作,是程序中的最小模块 禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,这使得模块之间的偶合度大大降低,保证了模块具有较好的独立性l防止程序员接触不该接触的内容-设计思想l允许设计人员对库内部结构进行修改,而不会对用户程序造成影响 程序维护和修改较为容易2.1.2 封装封装(续续)JAVA语言程序设计清华大学 郑莉132.1.3 继承继承l继承继承 是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类),体现了面向对象设计方法的共享机制 在继承过程中派生类继承了基类的特性,包
9、括方法和实例变量 派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要 有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量JAVA语言程序设计清华大学 郑莉14l单继承单继承 任何一个派生类都只有单一的直接父类 类层次结构为树状结构l多继承多继承 一个类可以有一个以上的直接父类 类层次结构为网状结构,设计及实现比较复杂lJavaJava语言仅支持单继承语言仅支持单继承2.1.3 继承继承(续续)JAVA语言程序设计清华大学 郑莉152.1.4 多态多态l多态多态 相同的操作可作用于多种类型的对象上,并获得不同的结果 l操作名的多态:即多个操作具有相同的名字,但接收消
10、息的类型不同(如:对字符和数值型数据的排序;不同形状面积的计算)l与继承有关的多态:同一操作被不同对象调用时可能产生不同的行为(如:drivecar 、motorcycle ) 很好地解决了应用程序方法同名问题,具有行为共享、代码共享的优势JAVA语言程序设计清华大学 郑莉抽象类抽象类抽象函抽象函数JAVA语言程序设计清华大学 郑莉172.2 类l类与对象类与对象 在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class) 一个类是对一类对象的描述, 封装了一类对象的状态和方法。 类是组成Java程序的基本要素,是用来定义对象的模板。对象是类的具体实例。如:篮球是球类的
11、一个实例、计科学生是学生的一个实例 总结:类向用户提供的是一种服务JAVA语言程序设计清华大学 郑莉18l对象是类的具体实例,是类的属性和对象是类的具体实例,是类的属性和功能的封装体功能的封装体 对象数据作用于数据的操作l对象有两个层次的含义对象有两个层次的含义 现实世界中对象是客观世界的实体 程序设计中对象是一组变量和相关方法的集合。其中变量表示对象的特征,方法表示对象的行为JAVA语言程序设计清华大学 郑莉192.2.1 类声明类声明类的实现包括两部分类的实现包括两部分:类声明和类体。类声明和类体。class People “class People”叫做类声明;叫做类声明;“People
12、” 是类名。习惯上类名的第是类名。习惯上类名的第一个字母大写,但这不是必须的。一个字母大写,但这不是必须的。 JAVA语言程序设计清华大学 郑莉202.2.2. 类体类体l写类的目的是为了写类的目的是为了描述一类事物共有描述一类事物共有的属性和功能的属性和功能,描述过程由类体来实,描述过程由类体来实现。类声明之后的一对大括号现。类声明之后的一对大括号“”,“”以及它们之间的内容称做类体,以及它们之间的内容称做类体,大括号之间的内容称做类体的内容。大括号之间的内容称做类体的内容。l类体的内容由两部分构:类体的内容由两部分构:一部分是变一部分是变量的定义,用来刻画属性;另一部分量的定义,用来刻画属
13、性;另一部分是方法的定义,用来刻画功能。是方法的定义,用来刻画功能。21class Lander float upper, lower, hight, laderArea; /变量定义部分变量定义部分 float CompArea() /方法定义方法定义 laderArea=(upper+lower)*hight/2.0; return laderArea; void ModifyHight(float h) /方法定义方法定义 hight=h; JAVA语言程序设计清华大学 郑莉222.3 对象 l类是创建对象的模板。当使用一个类创建类是创建对象的模板。当使用一个类创建了一个对象时,我们给出
14、了这个类的一个了一个对象时,我们给出了这个类的一个实例。实例。类对象或实例属性和行为People体重=45公斤身高=1.70米爱好=“喜欢运动”体重=80公斤身高=1.60米爱好=“喜欢睡觉”体重、身高、爱好。JAVA语言程序设计清华大学 郑莉232.3.1.创建对象创建对象l创建一个对象包括对象的声明和为对创建一个对象包括对象的声明和为对象分配内存两个步骤。象分配内存两个步骤。 (1)对象的声明。对象的声明。一般格式为:一般格式为: 类的名字 对象名字;如:如: People zhangSang;JAVA语言程序设计清华大学 郑莉24(2)为声明的对象分配内存为声明的对象分配内存 使用使用n
15、ew运算符和类的构造方法为声明的运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造系统会调用默认的构造方法(默认的构造方法是无参数的方法是无参数的),构造方法的名字必须和构造方法的名字必须和类名相同类名相同。如:。如: zhangSang=new People();25 class XiyoujiRenwu /类类 XiyoujiRenwu蓝图蓝图 float height,weight; String head, ear,hand,foot, mouth; /属性属性 void speak(String s
16、) /方法方法 System.out.println(s); class A /测试类中创造实例对象测试类中创造实例对象 public static void main(String args) XiyoujiRenwu zhubajie; /声明对象声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存,为对象分配内存, /使用使用new 运算符和默认的构造方法运算符和默认的构造方法 JAVA语言程序设计清华大学 郑莉26 声明对象时的内存模型声明对象时的内存模型 l当用当用XiyoujiRenwu类类声明一个变量,即声明一个变量,即对象对象zhubajie时,
17、时,如例子如例子1中的对象中的对象zhubajie:XiyoujiRenwu zhubajie;内存模型如左图所示 此时的对象称为空对象此时的对象称为空对象JAVA语言程序设计清华大学 郑莉27 对象分配内存后的内存模型对象分配内存后的内存模型 l当系统见到:当系统见到: zhubajie=new XiyoujiRenwu(); 时,就会做两件事:时,就会做两件事: 为为height,weight,head,ear,mouth,hand,foot各个各个变量分配内存,即,即XiyoujiRenwu类的成员变量被分配内存空间,类的成员变量被分配内存空间,然后执行构造方法中的语句,然后执行构造方法
18、中的语句,确定成员变量的初始值。确定成员变量的初始值。 new运算符在为变量运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将分配内存后,将返回一个引用给对象变量给对象变量zhubajie。 因此,这些被分配因此,这些被分配了内存的变量便由对象了内存的变量便由对象zhubajie进行管理。进行管理。成员变量内存位置的首地址信息内存单位称为对象的实体JAVA语言程序设计清华大学 郑莉282.3.2.使用对象使用对象 l对象不仅可以操作自己的变量改变状对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个态,而且还拥有了使用创建它的那
19、个类中的方法的能力,对象通过使用这类中的方法的能力,对象通过使用这些方法可以产生一定的行为;些方法可以产生一定的行为;l对象可以创建多个;对象可以创建多个;l通过使用运算符通过使用运算符“.”,对象可以实现,对象可以实现对自己的变量访问和方法的调用;对自己的变量访问和方法的调用;l当对象调用方法时,方法中出现的成当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。员变量就是指该对象的成员变量。JAVA语言程序设计清华大学 郑莉29class People int height; String ear; String eye; void speak(String s) System.o
20、ut.println(s); class A public static void main(String args) People zhubajie; zhubajie=new People(); zhubajie.height=170; zhubajie.ear=两只大耳朵两只大耳朵; System.out.println(“身身 高高:+zhubajie.height); System.out.println(zhubajie.ear); zhubajie.speak(“师傅,咱们别去西天师傅,咱们别去西天 了,改去月宫吧了,改去月宫吧); JAVA语言程序设计清华大学 郑莉30clas
21、s B public static void main(String args) People zhoujielun; zhoujielun =new People(); zhoujielun .height=175; zhoujielun .eye=“眼睛不太大眼睛不太大; System.out.println(身高身高:+ zhoujielun.height); System.out.println(zhoujielun .eye); zhoujielun.speak(“嗨,大家好!嗨,大家好!); l例子例子1:f:/workspace/Peoplel例子例子2:f:/workspace
22、/AreaJAVA语言程序设计清华大学 郑莉312.3.3.对象的引用和实体对象的引用和实体l当用类创建一个对象时,类中的成员当用类创建一个对象时,类中的成员变量被分配内存空间,这些变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着,而对象中存放着引用,以确保实体由该对象操作使用。引用,以确保实体由该对象操作使用。(如前图所示如前图所示) l一个类创建的两个对象,如果具有相一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实同的引用,那么就具有完全相同的实体。体。 People A=new People(170, “黑色”);People B=new People(1
23、75, “棕色”);AB;0 xBB170黑色0 xDD175棕色P1P20 xDD175棕色0 xDDP1P2JAVA语言程序设计清华大学 郑莉32l没有实体的对象称作空对象,空对象不能没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产使用,即不能让一个空对象去调用方法产生行为。生行为。l内存回收技术内存回收技术 Java的垃圾收集器自动扫描对象的动态内存区,对不使用的做上标记以进行垃圾回收 垃圾回收器作为一个线程运行,当系统内存耗尽或程序调用System.gc()进行垃圾收集时,线程与系统同步运行 Java的每一个类都有一个finalize()方法用于释放资源JAVA
24、语言程序设计清华大学 郑莉33 2.3.4.参数传值参数传值基本数据类型参数的传值基本数据类型参数的传值 l对于基本数据类型的参数,向该参数传递对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比的值的级别不可以高于该参数的级别,比如,不可以向如,不可以向int型参数传递一个型参数传递一个float值,值,但可以向但可以向double型参数传递一个型参数传递一个float值。值。l在在Java中,方法的所有参数都是中,方法的所有参数都是“传值传值”的,也就是说,方法中参数变量的值是调的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。例如,如果向方法用者指定的值的拷贝。
25、例如,如果向方法的的int型参数型参数x传递一个传递一个int值,那么参数值,那么参数x得得到的值是传递值的到的值是传递值的拷贝拷贝。方法如果改变参。方法如果改变参数的值,不会影响向参数数的值,不会影响向参数“传值传值”的变量的变量的值。(参见的值。(参见1.5.4 passArray.java)JAVA语言程序设计清华大学 郑莉34引用类型参数的传值引用类型参数的传值 lJava的引用型数据包括的引用型数据包括对象、数组和接口对象、数组和接口。当参数是引用类型时,当参数是引用类型时,“传值传值”传递的是传递的是变量的变量的引用引用。l如果改变参数变量所引用的实体,就会导如果改变参数变量所引用
26、的实体,就会导致原变量的实体发生同样的变化。但是,致原变量的实体发生同样的变化。但是,改变参数的引用不会影响向其传值的变量改变参数的引用不会影响向其传值的变量的引用。的引用。JAVA语言程序设计清华大学 郑莉35l总结总结 基本数据类型参数传值l不会修改原参数值 引用类型参数传值(对象、数组、接口)l会修改原参数值l例子:例子:f:/workspace/Example4_5JAVA语言程序设计清华大学 郑莉36public class People int money; void setMoney(int n) money=n; public class Comp void f(double
27、y, People p) y=y+1; p.setMoney(100); System.out.println(参数y的值是: + y); System.out.println(参数对象p的money 是:+ p.money); JAVA语言程序设计清华大学 郑莉37lpublic class Example4_5lpublic static void main(String args) ll double y=0.8;l People zhang = new People();l zhang.setMoney(8888);l System.out.println(在方法在方法f被调用之前对象
28、被调用之前对象zhang的的 +money是:是: + zhang.money+ y的值是:的值是:+ y);l Comp a = new Comp();l a.f(y,zhang);l System.out.println(在方法在方法f被调用之后被调用之后main方法中方法中y的值是:的值是: + y); /传值传值l System.out.println(在方法在方法f被调用之后被调用之后main方法中对方法中对象象zhang的的 +money是:是:+zhang.money); /传引用传引用l l在方法f被调用之前对象zhang的money是:8888 y的值是:0.8参数y的值是:
29、1.8参数对象p的money是:100在方法f被调用之后main方法中y的值是:0.8在方法f被调用之后main方法中对象zhang的money 是:100例例JAVA语言程序设计清华大学 郑莉382.2.3 数据成员数据成员l数据成员数据成员表示Java类的状态声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)分为实例变量(实例成员变量)和类变量(静态变量)类与对象JAVA语言程序设计清华大学 郑莉39 声明格式public | protected | private stati
30、c finaltransient volatile变量数据类型变量数据类型 变量名变量名1=变量初值变量初值, 变量名变量名2=变量初值变量初值, ; 格式说明lpublic、protected、private 为访问控制符lstatic指明这是一个静态成员变量lfinal指明变量的值不能被修改ltransient指明变量是临时状态lvolatile指明变量是一个共享变量2.2.3 数据成员数据成员(续续)类 与 对 象JAVA语言程序设计清华大学 郑莉401.成员变量和局部变量成员变量和局部变量l类体分为两部分。变量定义部分所定义的变量被称为类的成员变量。类体分为两部分。变量定义部分所定义的
31、变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。在方法体中定义的变量和方法的参数被称为局部变量。 class People int boy; float a; void f () int girl; l成员变量与局部变量的区别成员变量与局部变量的区别 成员变量在整个类内都有效,局部变量只在定义它的方法内有效。成员变量局部变量JAVA语言程序设计清华大学 郑莉41l如果局部变量的名字与成员变量的名字相同,则如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏成员变量被隐藏,即这个成员变量在这个方法内,即这个成员变量在这个方法内暂时失效暂时失效 . class A in
32、t x = 9, y; y=x; void f() int x=3; y=x; y=9y=3JAVA语言程序设计清华大学 郑莉42l如果局部变量的名字与成员变量的名字相同,则如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字员变量,必须使用关键字this。class A int x = 9, y; y=x void f() int y = 3; y= this.x; y=9y=9JAVA语言程序设计清华大学 郑莉43l成员变量又分为成员变量又分为实例成员变量(简称实例变量)(简称实例变量) 和和类
33、变量(也称静态变量(也称静态变量).如果成员变量的类型前如果成员变量的类型前面加上关键字面加上关键字static,这样的成员变量称做是类,这样的成员变量称做是类变量或静态变量。变量或静态变量。 class People float x; /instance member variable static int y; /class variable 变量变量成员变量成员变量局部变量局部变量实例变量实例变量类变量类变量JAVA语言程序设计清华大学 郑莉442.实例变量与类变量的区别实例变量与类变量的区别 Java执行时,类的字节码被加载到内存,如果该类未创建对象,实例变量则不会被分配内存;但类中的
34、类变量被加载到内存时,就已经被分配相应内存空间。l不同对象的实例变量分配不同的内存空间l所有对象的类变量分配相同的内存空间 改变其中一个对象的这个类变量将会影响其它对象的这个类变量,即对象共享类变量 什么变量可声明为类变量?l类中所有对象都具有相同的属性,可声明为类变量 例子:StaticTest.java Class Takecare static int x; int y; class Test Takecare A1=new Takecare(); Takecare A2=new Takecare();X 0 A1 0 x325 A2 0 xAB5类变量类变量y 0y 0问题:A1.x=
35、18则A2.x=?JAVA语言程序设计清华大学 郑莉45 类变量是和该类创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。因此,类变量不仅可以通过某个对象访问也可以直接通过类名访问。 实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。 当类中的类变量被加载到内存时,就被当类中的类变量被加载到内存时,就被分配了相应的入口地址,即使没有创建分配了相应的入口地址,即使没有创建对象也可以通过类名来进行访问对象也可以
36、通过类名来进行访问JAVA语言程序设计清华大学 郑莉46l实例变量和类变量都可被声明为实例变量和类变量都可被声明为finallfinal实例变量必须在每个构造方法结束之实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化,前赋初值,以保证使用之前会被初始化,一旦初始化便不可改变一旦初始化便不可改变l不可改变的意思:对不可改变的意思:对基本类型来说基本类型来说是其值是其值不可变,而对于不可变,而对于对象变量对象变量来说其引用不可来说其引用不可再变。再变。l其初始化可以在两个地方其初始化可以在两个地方,一是在,一是在final变变量定义时直接给其赋值,二是在构造方法量定义时直接给其赋
37、值,二是在构造方法中。这两个地方只能选其一。中。这两个地方只能选其一。4. 数据成员数据成员(续续)final修饰符修饰符类与对象JAVA语言程序设计清华大学 郑莉472.2.4 方法成员方法成员l方法成员方法成员 定义类的行为l一个对象能够做的事情l我们能够从一个对象取得的信息 可以没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分 分为实例方法和类方法类与对象JAVA语言程序设计清华大学 郑莉48声明格式public | protected | private static finalabstract native synchronized返回类型返回类型 方法名方法名(参
38、数列表参数列表) throws exceptionList方法体方法体2.2.4 方法成员方法成员(续续)声明格式声明格式类与对象JAVA语言程序设计清华大学 郑莉49格式说明l方法修饰public、protected、private 为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问2.2.4 方法成员方法成员(续续)格式说明格式说明类与对象JAVA语言程序设计清华大学 郑莉50 格式说明(续)l返回类型 方法返回值的类型
39、,可以是任意的Java数据类型 当不需要返回值时,返回类型为voidl参数类型 简单数据类型, 引用类型(数组、类或接口) 可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数l方法体 方法的实现 包括局部变量的声明以及所有合法的Java指令 局部变量的作用域只在该方法内部lthrows exceptionList 用来处理异常2.2.4 方法成员方法成员(续续)格式说明格式说明类与对象JAVA语言程序设计清华大学 郑莉51l方法调用方法调用 给对象发消息意味着调用对象的某个方法l从对象中取得信息 l修改对象的状态或进行某种操作 l进行计算及取得结果等 调用格式.(参数列表)称点操作符
40、“.”前面的为消息的接收者(receiver) 参数传递l值传递:参数类型为基本数据类型时l引用传递:参数类型为对象类型或数组时2.2.4 方法成员方法成员(续续)方法调用方法调用类与对象JAVA语言程序设计清华大学 郑莉52l 实例方法实例方法 表示特定对象的行为 声明时前面不加static修饰符 使用时需要发送给一个类实例2.2.4 方法成员方法成员(续续)实例方法实例方法类与对象JAVA语言程序设计清华大学 郑莉53l在在Circle类中声明计算周长的方法类中声明计算周长的方法 public class Circle static double PI = 3.14159265; int
41、radius; public double circumference() return 2 * PI * radius; 由于radius是实例变量,在程序运行时,Java会自动取其接收者对象的属性值2.2.4 方法成员方法成员(续续)例例2_6类与对象JAVA语言程序设计清华大学 郑莉54l方法调用测试方法调用测试public class CircumferenceTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2
42、.radius = 10; double circum1 = c1.circumference(); double circum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); System.out.println(Circle 2 has circumference + circum2); 2.2.4 方法成员方法成员(续续)例例2_6类与对象JAVA语言程序设计清华大学 郑莉55l运行结果运行结果Circle 1 has circumference 314.159265Circ
43、le 2 has circumference 62.831853l说明说明 在使用实例方法时,需要将其发送给一个实例对象(也称给对象发送一条消息),radius的值即是接收者对象的值 在执行c1.circumference()时,radius的值为c1的radius属性值;在执行c2.circumference()时,radius的值为c2的radius属性值类与对象2.2.4 方法成员方法成员(续续)例例2_6运行结果运行结果JAVA语言程序设计清华大学 郑莉56l在在Circle类及类及Rectangle类中声明计算面积的方法类中声明计算面积的方法area()2.2.4 方法成员方法成员(
44、续续)例例2_7public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; public class Rectangle double width; double height; public double area() return width * height; 类与对象JAVA语言程序设计清华大学 郑莉57l声明测试类
45、,对声明测试类,对Circle类及类及Rectangle类的类的area()方法方法进行测试进行测试 public class AreaTester public static void main(String args) Circle c = new Circle(); c.radius = 50; Rectangle r = new Rectangle(); r.width = 20; r.height = 30; System.out.println(Circle has area + c.area(); System.out.println(Rectangle has area + r
46、.area(); 类与对象2.2.4 方法成员方法成员(续续)例例2_7JAVA语言程序设计清华大学 郑莉58l运行结果运行结果Circle has area 7853.981625Rectangle has area 600.0l说明说明 不同的类中可以声明相同方法名的方法 使用时,系统会根据接收者对象的类型找到相应类的方法2.2.4 方法成员方法成员(续续)例例2_7运行结果运行结果类与对象JAVA语言程序设计清华大学 郑莉59l带参数的方法举例:在带参数的方法举例:在Circle类中增加方法改变圆类中增加方法改变圆的半径的半径public class Circle static doub
47、le PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; public void enlarge(int factor) radius = radius * factor; 2.2.4 方法成员方法成员(续续)例例2_8类与对象JAVA语言程序设计清华大学 郑莉60l测试类测试类public class EnlargeTester public static void main(St
48、ring args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; System.out.println(Circle 1 的周长: + c1.circumference(); System.out.println(Circle 2 的周长: + c2.circumference(); c2.enlarge(4); System.out.println(Circle 2 扩大后的周长: + c2.circumference(); 2.2.4 方法成员方法成员(续续)例例2_
49、8类与对象JAVA语言程序设计清华大学 郑莉61l运行结果运行结果Circle 1 的周长: 314.159265Circle 2 的周长: 62.831853Circle 2 扩大后的周长: 251.3274122.2.4 方法成员方法成员(续续)例例2_8运行结果运行结果类与对象JAVA语言程序设计清华大学 郑莉62l以对象作为参数的方法举例:在以对象作为参数的方法举例:在Circle类中增加类中增加fitsInside方法判断一个圆是否在一个长方形内,方法判断一个圆是否在一个长方形内,需要以需要以Rectangle类的对象作为参数类的对象作为参数public class Circle s
50、tatic 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 y?x:y; static float min(float x, float y) float d=setA(x,y);
51、 return d; class A int a; a=12;类体由成员变量和方法定义两部分组成JAVA语言程序设计清华大学 郑莉69l包包(package) 是一组类的集合l一个包可以包含若干个类文件,还可包含若干个包 包的作用l将相关的源代码文件组织在一起l类名的空间管理,利用包来划分名字空间,便可以避免类名冲突l提供包一级的封装及存取权限2.2.5 类的组织包的概念类的组织包的概念JAVA语言程序设计清华大学 郑莉70l包的命名包的命名 每个包的名称必须是“独一无二”的 Java中包名使用小写字母表示 命名方式建议l将机构的Internet域名反序,作为包名的前导JAVA语言程序设计清华
52、大学 郑莉71l编译单元与类空间编译单元与类空间 一个Java源代码文件称为一个编译单元,由三部分组成l所属包的声明(省略,则属于默认包)lImport (引入)包的声明,用于导入外部的类l类和接口的声明 一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件 利用包来划分名字空间,便可以避免类名冲突class XiyoujiRenwu float height, weight; String head, ear, hand, foot, mouth; void speak(String s) Sys
53、tem.out.print(s); class A public static void main(String args) XiyoujiRenwu zhubajie; zhubajie=new XiyoujiRenwu(); class Point int x, y; Point(int a, int b) x=a; y=b; Public class A public static void main(String args) Point p1, p2; p1=new Point(10,10); p2=new Point(23, 35); Common Programming Error
54、:Defining more than one public class in the same file is a syntax error.JAVA语言程序设计清华大学 郑莉73l包与目录包与目录 Java使用文件系统来存储包和类 包名就是文件夹名,即目录名 目录名并不一定是包名JAVA语言程序设计清华大学 郑莉74l包的声明包的声明:package 语句作为语句作为Java源文件的第一源文件的第一条语句,条语句,指明该源文件定义的类所在的包指明该源文件定义的类所在的包。 命名的包(命名的包(Named Packages)l例如: package mypackage;l如果源程序中省略了如
55、果源程序中省略了package语句,源文件中定语句,源文件中定义命名的类被隐含地认为是无名包的一部分,即义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中源文件中定义命名的类在同一个包中,但该包没,但该包没有名字。有名字。l包名可以是一个合法的标识符,也可以是若干个包名可以是一个合法的标识符,也可以是若干个标识符加标识符加“.”分割而成分割而成 。 JAVA语言程序设计清华大学 郑莉75l语法语法: spack/PrimNumber.java spack.PrimNumbet.javal将类打包将类打包 package package_name JAVA语言程序设计清华
56、大学 郑莉76l引入包引入包 为了使用其它包中所提供的类,需要使用import语句引入所需要的类 Java编译器为所有程序自动引入包java.lang import语句的格式 import package1.package2. (classname |*);l其中package1.package2表明包的层次,它对应于文件目录lclassname则指明所要引入的类名l如果要引入一个包中的所有类,则可以使用星号(*)来代替类名JAVA语言程序设计清华大学 郑莉77import sPack.*;public class callPrimNumber public static void main(
57、String args) PrimNumber p=new PrimNumber(); p.getPrimnumber(5); 注:注:callPrimNumber通过通过import sPack包调用包调用PrimNumber类类package sPack;public class PrimNumber public void getPrimnumber(int n) int sum=0, i, j;for(i=1; i=n; i+) for(j=2; ji/2) System.out.println(Number : + i); 注:该类单独放于注:该类单独放于sPack包中包中JAVA语
58、言程序设计清华大学 郑莉78Eclipse中包的创建与使用中包的创建与使用JAVA语言程序设计清华大学 郑莉79JAVA语言程序设计清华大学 郑莉80 包创建好后,在该包中创建包创建好后,在该包中创建class类类例子:例子:workspacebasicsPackPrimNumber.java workspacebasiccallPrimNumber.javaJAVA语言程序设计清华大学 郑莉81Java包包Total 130 packages8 packages for API-java.applet: for creating applet, interaction of applets
59、with the browser-java.awt: for creating GUI-java.awt.event: handle event for GUI componentsJAVA语言程序设计清华大学 郑莉82-java.io: enable program to input and output-java.lang: basic language, imported by compiler-: enable program to communicate via internet-java.text: manipulate numbers, dates, characters, an
60、d string-java.util: contains utility classes (basic data type) and interface JAVA语言程序设计清华大学 郑莉832.2.6 类的访问控制类的访问控制 -Java2实用教程实用教程 4.2-4.7l类创建了一个对象之后,该对象可以通过类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的法,但对象操作自己的变量和使用类中的方法是有一定限制的。方法是有一定限制的。 l所谓访问权限是指对象是否可以通过所谓访问权限是指对象是否可以通过“.”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年传染病防治与隔离措施应急演练考试答案及解析
- 2025年淮北市粮食产业发展集团有限公司招聘6人模拟试卷附答案详解(突破训练)
- 2025年皮肤科常见皮疾诊疗技巧考察答案及解析
- 2025年康复医学康复训练方案设计模拟考试卷答案及解析
- 2025年精神科抑郁症患者的心理干预模拟测试答案及解析
- 2025年济宁市任城区事业单位公开招聘工作人员(教育类)(125人)考前自测高频考点模拟试题及答案详解(全优)
- 2025湖南郴州市汝城县事业单位招聘引进高层次和急需紧缺人才21人模拟试卷及一套参考答案详解
- 2025年老年病学实践操作技能检验答案及解析
- 2025年吉林农业大学公开招聘博士及急需紧缺人才(1号)(80人)考前自测高频考点模拟试题(含答案详解)
- 2025年营养科膳食指导与营养咨询模拟测试卷答案及解析
- (完整)马克思主义政治经济学习题及参考答案
- 大规模模型蒸馏技术
- 贝朗DIALOG+透析机水路设计概览课件
- 光电功能材料课程-13-18课件
- 施工现场污水排放方案
- 黔西市中医医院金阳院区环评报告
- 我的家乡-枣阳
- 青春期生理卫生知识讲座男生篇
- 高中期中考试家长会PPT课件 (共51张PPT)
- 全球卫生治理课件
- 实验室生物安全程序文件
评论
0/150
提交评论