Java面向对象程序设计第4章_类与对象_第1页
Java面向对象程序设计第4章_类与对象_第2页
Java面向对象程序设计第4章_类与对象_第3页
Java面向对象程序设计第4章_类与对象_第4页
Java面向对象程序设计第4章_类与对象_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、2010-1-101Java面向对象程序设计面向对象程序设计 第第4章章类与对象 2010-1-102主要内容主要内容类类对象对象参数传值参数传值对象组合对象组合static关键字关键字this关键字关键字包包import语句语句jar文件文件难点难点参数传值与对象组合参数传值与对象组合包和包和import语句语句导读导读2010-1-1034.1 编程语言的几个发展阶段编程语言的几个发展阶段 面向机器语言面向机器语言 面向过程语言面向过程语言 面向对象语言面向对象语言 面向对象编程主要体现下列三个特性 封装性 继承 多态 2010-1-1044.2 类类 类类是组成是组成JavaJava程序

2、的基本要素。类封装了程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的一类对象的状态和方法。类是用来定义对象的模板。模板。 类的实现包括两部分:类声明和类体。基类的实现包括两部分:类声明和类体。基本格式为:本格式为:class class 类名类名 类体的内容类体的内容 2010-1-1054.2.1 类声明类声明 类声明类声明 :class 类名类名 如:class People”和“class 动物”称作类声明;“People”和“动物”分别是类名。 给类命名时,遵守下列编程风格(这不是语法要求给类命名时,遵守下列编程风格(这不是语法要求的,但应当遵守):的,但应当遵守):1

3、如果类名使用拉丁字母,那么名字的首字母使用大写字母,如。 2类名最好容易识别、见名知意。当类名由几个“单词”复合而成时,每个单词的首字母使用大写。 2010-1-1064.2.2 类体类体 类声明之后的一对大括号类声明之后的一对大括号“”,“”以及它以及它们之间的内容称作类体,大括号之间的内容称作们之间的内容称作类体,大括号之间的内容称作类体的内容。类体的内容。 类体的内容由两部分构:一部分是变量的声明,类体的内容由两部分构:一部分是变量的声明,用来刻画属性;另一部分是方法的定义,用来刻用来刻画属性;另一部分是方法的定义,用来刻画功能。画功能。 2010-1-1074.2.3 成员变量和局部变

4、量成员变量和局部变量 类体中类体中变量声明部分所声明的变量被称作类的成员变量。在方法体中声明的变量和方法的参数被称作局部变量。 1变量的类型:变量的类型:成员变量和局部变量的类型可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组、对象和接口(对象和接口见后续内容)。2变量的有效范围:变量的有效范围:成员变量在整个类内都有效,局部变量只在声明它的方法内有效。方法参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。3实例变量与类变量:实例变量与类变量:在声明成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量(类变量也称为stat

5、ic变量,静态变量)。4成员变量的隐藏:成员变量的隐藏:如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。 5编程风格编程风格(1)一行只声明一个变量。 (2)变量的名字符合标识符规定。 (3)变量名字见名知意,避免容易混淆的变量名字。2010-1-1084.2.4 方法方法 方法的定义包括两部分:方法声明和方法体。一般格方法的定义包括两部分:方法声明和方法体。一般格式为:式为:方法声明部分方法声明部分 方法体的内容方法体的内容 1方法声明 方法声明包括方法名和方法的返回类型,如:float area() 注:注:方法的返回类型方法的返回类型、方法的

6、参数、方法的名字方法的参数、方法的名字 2方法体 方法声明之后的一对大括号“” ,“”以及之间的内容称作方法的方法体。方法体的内容包括局部变量的声明和Java语句。 2010-1-1094.2.5 方法重载方法重载 方法重载的意思是:一个类中可以有多个方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数不同,即或者是参数的个数不同,或者是参数的类型不同。的类型不同。 2010-1-10104.2.6 构造方法构造方法 构造方法是一种特殊方法,构造方法是一种特殊方法,它的名字必须它的名字必须与

7、它所在的类的名字完全相同,而且没有类型,与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载。构造方法也可以重载。 2010-1-10114.2.7 类方法和实例方法类方法和实例方法 方法声明时,方法类型前面不加关键字方法声明时,方法类型前面不加关键字staticstatic修饰的是实例方法、加修饰的是实例方法、加staticstatic修饰的是修饰的是类方法(静态方法)。类方法(静态方法)。 2010-1-10124.2.8 几几个值得注意的问题个值得注意的问题 1 1对成员变量的操作只能放在方法中,方对成员变量的操作只能放在方法中,方法可以对成员变量和该方法体中声明的局部变法可以对

8、成员变量和该方法体中声明的局部变量进行操作。量进行操作。 2 2需要注意的是:实例方法既能对类变量操需要注意的是:实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变作也能对实例变量操作,而类方法只能对类变量进行操作。量进行操作。 3 3一个类中的方法可以互相调用,实例方法一个类中的方法可以互相调用,实例方法可以调用该类中的其它方法;类中的类方法只可以调用该类中的其它方法;类中的类方法只能调用该类的类方法,不能调用实例方法。能调用该类的类方法,不能调用实例方法。 2010-1-10134.3 对象对象4.3.1 创建对象创建对象 1 1对象的声明对象的声明 People zhangP

9、ing; 2.2.为声明的对象分配内存为声明的对象分配内存 zhangPing=new People();zhangPing=new People(); 例例4-1,4-1,例例4-24-23 3对象的内存模型对象的内存模型 (1 1)声明对象时的内存模型声明对象时的内存模型(2 2)对象分配内存后的内存模型对象分配内存后的内存模型4 4创建多个不同的对象创建多个不同的对象 2010-1-10144.3.2 使用对象使用对象 1 1通过使用运算符通过使用运算符“.” “.” 对象操作自己的变量对象操作自己的变量(对象的属性)(对象的属性) 2 2使用运算符使用运算符“.”,“.”,对象调用类中

10、的方法(对对象调用类中的方法(对象的功能)象的功能) 例例4-34-3 2010-1-10154.3.3 对象的引用和实体对象的引用和实体 当用类创建一个对象时,类中当用类创建一个对象时,类中的成员变量在分配内存空间,这的成员变量在分配内存空间,这些内存空间些内存空间称作称作该对象的实体或该对象的实体或对象的变量,而对象中存放着引对象的变量,而对象中存放着引用。用。 一个类创建的两个对象,如果一个类创建的两个对象,如果具有相同的引用,那么就具有完具有相同的引用,那么就具有完全相同的实体。全相同的实体。 2010-1-10164.4 参数传值参数传值 4.4.1 基本数据类型参数的传值基本数据类

11、型参数的传值 对于基本数据类型的参数,向该参数传递对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别的值的级别不可以高于该参数的级别 。 例例4-44-4 2010-1-10174.4.2 引用类型参数的传值引用类型参数的传值 当参数是引用类型时,当参数是引用类型时,“传值传值”传递的是变传递的是变量中存放的量中存放的“引用引用”,而不是变量所引用的实体。,而不是变量所引用的实体。 例例4-54-5 2010-1-10184.4.3 可变参数可变参数 可变参数是指在声明方法时不给出参数列表可变参数是指在声明方法时不给出参数列表中从某项直至最后一项参数的名字和个数,但这中从某项

12、直至最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数使用些参数的类型必须相同。可变参数使用“”“”表表示若干个参数,这些参数的类型必须相同,最后示若干个参数,这些参数的类型必须相同,最后一个参数必须是参数列表中的最后一个参数。一个参数必须是参数列表中的最后一个参数。 例如:例如: public void f(int . x)public void f(int . x) 例例4-64-62010-1-10194.4.4 有理数的类封装有理数的类封装 面向对象编程核心思想之一就是将数据和对面向对象编程核心思想之一就是将数据和对数据的操作封装在一起。数据的操作封装在一起。 1 1Rati

13、onalRational(有理数)类有理数)类 2 2用用RationalRational对象做运算对象做运算 Rational.javaRational.java MainClass.java MainClass.java 2010-1-10204.5 对象的组合对象的组合 一个类可以把对象作为自己的成员变量,一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,那么该对象中就会如果用这样的类创建对象,那么该对象中就会有其它对象,也就是说该对象将其他对象作为有其它对象,也就是说该对象将其他对象作为自己的组成部分,或者说该对象是由几个对象自己的组成部分,或者说该对象是由几个对象组合而成。

14、组合而成。例例4-74-7 2010-1-10214.6 staticstatic关键字关键字 用static 修饰的变量 类变量类变量没有用static 修饰的变量 实例变量实例变量方法声明中用static 修饰的方法类方法类方法方法声明中不用static 修饰的方法实例方法实例方法2010-1-10224.6.1 实例变量和类变量的区别实例变量和类变量的区别 如果类中有类变量,那么所有对象的这个如果类中有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类个对象的这个类变量会影响其它对象的这个类变

15、量。也就是说对象共享类变量。变量。也就是说对象共享类变量。 例例4-84-8 2010-1-10234.6.2 实例方法和类方法的区别实例方法和类方法的区别 当用类创建对象后,类中的实例方法才分配当用类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对入口地址,从而实例方法可以被类创建的任何对象调用执行。象调用执行。 对于类中的类方法,在该类被加载到内存时,对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。就分配了相应的入口地址。 例例4-94-9 2010-1-10244.7 this this 关键字关键字 this是Java的一个关键字,表示某个对象

16、。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 2010-1-10254.7.1 在构造方法中使用在构造方法中使用this thisthis关键字出现在类的构造方法中时,代关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。表使用该构造方法所创建的对象。 例例4-104-10 2010-1-10264.7.2 在实例方法中使用在实例方法中使用this 当当thisthis关键字出现实例方法中时,代表正关键字出现实例方法中时,代表正在调用该方法的当前对象。在调用该方法的当前对象。 当实例成员变量在实例方法中出现时,默认当实例成员变量在实例方法中出现时,默认的格式是:

17、的格式是:this.this.成员变量。成员变量。 当当staticstatic成员变量在实例方法中出现时,成员变量在实例方法中出现时,默认的格式是:默认的格式是:类名类名. .成员变量。成员变量。 2010-1-10274.8 包包 包是包是Java语言中有效地管理类的一个机制。语言中有效地管理类的一个机制。 包名的目的是有效的区分名字相同的类。包名的目的是有效的区分名字相同的类。 2010-1-10284.8.1 包语句包语句 通过关键字通过关键字packagepackage声明包语句。声明包语句。 packagepackage语句作为语句作为JavaJava源文件的第一条语句,源文件的第

18、一条语句,为该源文件中声明的类指定包名。为该源文件中声明的类指定包名。 package package语句的一般格式为:语句的一般格式为: package package 包名包名; ; 2010-1-10294.8.2 有包名的类的存储目录有包名的类的存储目录 程序如果使用了包语句,例如:程序如果使用了包语句,例如: package tom.jiafeipackage tom.jiafei; 那么存储文件的目录结构中必须包含有如下的结那么存储文件的目录结构中必须包含有如下的结构构 tomjiafeitomjiafei 如:如: c:1000tomjiafei c:1000tomjiafei

19、并且要将源文件编译得到的类的字节码文件保并且要将源文件编译得到的类的字节码文件保存在目录存在目录c:1000tomjiafei中(源文件可以任意中(源文件可以任意存放)。存放)。2010-1-10304.8.3 运行有包名的主类运行有包名的主类 如果主类的包名是如果主类的包名是tom.jiafei,那么主类的字节那么主类的字节码一定存放在码一定存放在tomjiefei目录中,运行时必须到目录中,运行时必须到tomjiefei的上一层(即的上一层(即tom的父目录)目录中去的父目录)目录中去运行主类。运行主类。 假设假设tomjiefei的上一层目录是的上一层目录是1000,那么,必,那么,必须

20、如下格式来运行:须如下格式来运行: C:1000java tom.jiafei. C:1000java tom.jiafei.主类名主类名 注:主类名是:注:主类名是:“包名包名. .主类名主类名” ” 例例4-114-112010-1-10314.9 import import 语句语句 一个类可能需要另一个类声明的对象作为自一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类己的成员或方法中的局部变量,如果这两个类在同一个包中,当然没有问题。在同一个包中,当然没有问题。 如果一个类想要使用的那个类和它不在一个如果一个类想要使用的那个类和它不在一个包中,要使用包中,

21、要使用importimport语句完成使命。语句完成使命。2010-1-10324.9.1 引入类库中的类引入类库中的类 如果用户需要类库中的类就必须使用如果用户需要类库中的类就必须使用import语语句,如:句,如: import java.until.Date; import java.until.Date; 例例4-124-122010-1-10334.9.2 引入自定义包中的类引入自定义包中的类 用户程序可以使用用户程序可以使用tom.jiafei包包中的类,中的类,即使即使用用非类库非类库中有包名的类,也要使用中有包名的类,也要使用import语句,语句,如:如: import to

22、m.jiafei.import tom.jiafei.* *; ; 例例4-134-13, 例例4-144-142010-1-10344.9.3 使用无包名的类使用无包名的类 如果一个类想使用无名包中的类,只要将这如果一个类想使用无名包中的类,只要将这个无包名的类的字节码和当前类保存在同一目个无包名的类的字节码和当前类保存在同一目录中即可。录中即可。 例例4-154-152010-1-10354.9.4 避免类名混淆避免类名混淆 1 1区分无包名和有包名的类区分无包名和有包名的类 如果想同时使用如果想同时使用tom.jiafeitom.jiafei包中的包中的A A类和无类和无名包中的名包中的

23、A A类,就不能省略包名,例如:类,就不能省略包名,例如: A a1=new A();A a1=new A(); tom.jiafei.A a2=new tom.jiafei.A(); tom.jiafei.A a2=new tom.jiafei.A();2区分有包名的类区分有包名的类 如果一个源文件引入了两个包中同名的类,如果一个源文件引入了两个包中同名的类,那么在使用该类时,不允许省略包名,比如:那么在使用该类时,不允许省略包名,比如: tom.jiafei.A bird=new tom.jiafei.A(); tom.jiafei.A bird=new tom.jiafei.A(); .

24、A goat=new .A(); .A goat=new .A(); 2010-1-10364.10 访问权限访问权限 访问限制修饰符有访问限制修饰符有privateprivate、protectedprotected和和publicpublic,都是都是JavaJava的关键字,用来修饰成员变的关键字,用来修饰成员变量或方法。量或方法。2010-1-10374.10.1 私有变量和私有方法私有变量和私有方法 用关键字用关键字private修饰的成员变量和方法称为私修饰的成员变量和方法称为私有变量和私有方法。有变量和私有方法。 对于私有成员变量或方法,只有在本类中创建对于私有成员变量或方法,只

25、有在本类中创建该类的对象时,这个对象才能访问自己的私有该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法。成员变量和类中的私有方法。 例例4-16,4-16,例例4-174-172010-1-10384.10.2 共有变量和共有方法共有变量和共有方法 用用public修饰的成员变量和方法被称为共有变修饰的成员变量和方法被称为共有变量和共有方法量和共有方法 。 我们在任何一个类中用类我们在任何一个类中用类Tom Tom 创建了一个对创建了一个对象后,该对象能访问自己的象后,该对象能访问自己的publicpublic变量和类中变量和类中的的publicpublic方法(也可以通过类名

26、来操作成员变方法(也可以通过类名来操作成员变量、方法)量、方法) 。2010-1-10394.10.3 友好变量和友好方法友好变量和友好方法 当在另外一个类中用类当在另外一个类中用类Tom 创建了一个对象创建了一个对象后,如果这个类与后,如果这个类与Tom类在同一个包中,那么该类在同一个包中,那么该对象能访问自己的友好变量和友好方法。对象能访问自己的友好变量和友好方法。 在任何一个与在任何一个与Tom同一包中的类中,也可以通同一包中的类中,也可以通过过Tom类的类名访问类的类名访问Tom类的类友好成员变量和类的类友好成员变量和类友好方法。类友好方法。2010-1-10404.10.4 受保护的

27、成员变量和方法受保护的成员变量和方法 用用protectedprotected修饰的成员变量和方法被称为受修饰的成员变量和方法被称为受保护的成员变量和受保护的方法保护的成员变量和受保护的方法 。2010-1-10414.10.5 publicpublic类与友好类类与友好类 类声明时,如果在关键字类声明时,如果在关键字classclass前面加上前面加上publicpublic关键字,就称这样的类是一个关键字,就称这样的类是一个public public 类类 。 可以在可以在任何另外一个类任何另外一个类中,使用中,使用publicpublic类创类创建对象。建对象。 如果一个类不加如果一个类

28、不加publicpublic修饰,这样的类被称修饰,这样的类被称作友好类。作友好类。 在另外一个类中使用友好类创建对象时,要保在另外一个类中使用友好类创建对象时,要保证它们是在证它们是在同一包中同一包中。2010-1-10424.11 基本类型的类包装基本类型的类包装 JavaJava的基本数据类型包括:的基本数据类型包括:bytebyte、intint、shortshort、longlong、floatfloat、doubledouble、charchar。 Java Java提供了基本数据类型相关的类,实现了提供了基本数据类型相关的类,实现了对基本数据类型的封装。对基本数据类型的封装。 这

29、些类分别是:这些类分别是:ByteByte、IntegerInteger、ShortShort、LongLong、FloatFloat、DoubleDouble和和CharacterCharacter类。这些类类。这些类在在java.langjava.lang包中。包中。2010-1-10434.11.1 DoubleDouble和和FloatFloat类类 Double类和类和Float类实现了对类实现了对double和和float基本型数据的类包装。基本型数据的类包装。 Double类的构造方法:类的构造方法:Double(double num) Float类的构造方法:类的构造方法: F

30、loat(float num) Double对象调用对象调用doubleValue()方法方法可以返回可以返回该对象含有的该对象含有的double型数据型数据。 Float对象调用对象调用floatValue()方法方法可以返回该对可以返回该对象含有的象含有的float型数据型数据。 2010-1-10444.11.2 ByteByte、Short Short 、IntegerInteger、LongLong类类 上述个类的构造方法分别上述个类的构造方法分别 : Byte(byte num) Short(short num) Integer(int num) Long(long num) By

31、te、Short、Integer和和Long对象分别调用对象分别调用byteValue ()、shortValue()、intValue()和和longValue ()方法方法返回该对象含有的返回该对象含有的基本型数据基本型数据。 2010-1-10454.11.3 CharacterCharacter类类 CharacterCharacter类实现了对类实现了对charchar基本型数据的类包装。基本型数据的类包装。 Character Character类的构造方法:类的构造方法:Character(char c) Character类中的一些常用类方法:类中的一些常用类方法: publi

32、c static boolean isDigit(char ch) 如果如果ch是数字字符方法返回是数字字符方法返回 true,否则返回否则返回false。 public static boolean isLetter(char ch) 如果如果ch是字母方法返回是字母方法返回 true,否则返回否则返回false。 public static boolean isLetterOrDigit(char ch) 如果如果ch是数字字符或字母方法是数字字符或字母方法返回返回 true,否则返回否则返回false。 public static boolean isLowerCase(char ch)

33、 如果如果ch是小写字母方法返回是小写字母方法返回 true,否则返回否则返回false。 public static boolean isUpperCase(char ch) 如果如果ch是大写字母方法返回是大写字母方法返回 true,否则返回否则返回false。 public static char toLowerCase(char ch) 返回返回ch的小写形式。的小写形式。 public static char toUpperCase(char ch) 返回返回ch的大写形式。的大写形式。 public static boolean isSpaceChar(char ch) 如果如果c

34、h是空格返回是空格返回true。例例4-184-182010-1-10464.11.4 自动装箱与拆箱自动装箱与拆箱 所谓自动装箱所谓自动装箱就是允许把一个基本数据类型的值直就是允许把一个基本数据类型的值直接赋值给基本数据类型相对应的类的实例,例如:接赋值给基本数据类型相对应的类的实例,例如: Integer number=100;Integer number=100; 自动拆箱自动拆箱就是允许把基本数据类型相对应的类的实就是允许把基本数据类型相对应的类的实例直接赋值给相应的基本数据类型变量或把基本数据例直接赋值给相应的基本数据类型变量或把基本数据类型相对应的类的实例当作相应的基本数据类型来使

35、类型相对应的类的实例当作相应的基本数据类型来使用,例如:用,例如:numbernumber是一个是一个IntegerInteger对象,那么允许:对象,那么允许: int x=number+number; int x=number+number; 例例4-194-192010-1-10474.12 反编译和文档生成器反编译和文档生成器 4.12.1 javapjavap反编译反编译 JDK提供的反编译器提供的反编译器javap.exe可以将字节可以将字节码反编译为源码,查看源码类中的码反编译为源码,查看源码类中的public方法方法名字和名字和public成员变量的名字,例如:成员变量的名字,

36、例如: javap java.util.Date 2010-1-10484.12.2 javadocjavadoc制作文档制作文档 使用使用JDK提供的提供的javadoc.exe可以制做源文件的可以制做源文件的html格式文档。格式文档。 假设假设D:test有源文件有源文件Example.java,用用 javadoc Example.java 生成生成Example.java的的html格式文挡。格式文挡。 例例4-204-202010-1-10494.13 jarjar文件文件 我们可以使用我们可以使用jar.exe命令把一些类的字节码文件压缩成一个命令把一些类的字节码文件压缩成一个jar文件,然后将这个文件,然后将这个jar文件存放到文件存放到Java运行环境的扩展中,即运行环境的扩展中,即将该将该jar文件存放在文件存放在JDK安装目录的安装目录的jrelibext文件夹中。这样,文件夹中。这样,Java应用程序就可以使用这个应用程序就可以使用这个jar文件中的类来创建对象了。文件中的类来创建对象了。(1 1)有包名的类)有包名的类: :TestOne和和TestTwo类的包名为类的包名为moon.star 首先编写一个清单文件:首先编写一个清单文件:hello.mf(Manifes

温馨提示

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

评论

0/150

提交评论