JAVA语言与编程第4章类与对象

上传人:san****019 文档编号:22735542 上传时间:2021-05-31 格式:PPT 页数:32 大小:289.81KB
收藏 版权申诉 举报 下载
JAVA语言与编程第4章类与对象_第1页
第1页 / 共32页
JAVA语言与编程第4章类与对象_第2页
第2页 / 共32页
JAVA语言与编程第4章类与对象_第3页
第3页 / 共32页
资源描述:

《JAVA语言与编程第4章类与对象》由会员分享,可在线阅读,更多相关《JAVA语言与编程第4章类与对象(32页珍藏版)》请在装配图网上搜索。

1、第4章 类与对象 4.1 基本概念4.1.1 面向对象编程简介 面向对象编程或面向对象设计均可称为OOP,它是目前占主流地位的一种程序设计方式,取代了先前的所谓结构化、面向过程的编程技术。 传统的结构化编程是设计一组函数来解决一个问题,即先解决算法,再解决使计算更容易的数据结构;OOP方法则相反,即先解决数据结构,再解决数据结构运算的算法,数据结构和算法均封装在对象中。 4.1.2 类与对象 在面向对象程序设计中,对象是程序的基本单位,相似的对象之间的关系就像是相同类型的不同变量。这些相似的对象可以通过一个类将它们抽象出来,在类中定义它们共同的属性和方法。 类实质上定义了一种对象类型,它是具有

2、相似行为的对象的一种抽象,描述了属于该类型的所有对象的性质统一的属性和统一的操作模式。 对象是在程序执行过程中由其所属的类动态生成的,一个类可以生成多个不同对象,对象也被称作类的实例。同一个类的所有对象有相同的性质。但一个对象的内部状态只能由其自身修改,任何别的对象都不能 修改它。因此,同一个类的对象虽然在外部表现形式上相同,但可以有不同的内部状态,即不同的属性值。 4.1.3 消息和方法 对象之间进行交互时,通过消息来实现。 构成消息的三个要素: (1) 接收消息的对象 (2) 接收消息的方法 (3) 方法所需要的参数4.1.4 面向对象编程的基本特征1.封装性: “封装”是一种组织开发软件

3、的方法,其基本思想是把客观世界中联系紧密的元素和相关操作组织在一起,使其相互关系隐藏在程序体内部,而对外仅仅表现为与其他封装体之间的接口。 在面向对象的程序开发中,每个类都封装了相关的数据和操作。另外, 在Java中,包的概念也体现了封装性,包将一组相关的类封装在一起。 类的封装性使得代码的可重用性大为提高。使用者不用知道实现的细节,只需要用设计者提供的消息来访问该对象(公共的方法)。 2.继承性: Java中的类组成一个层次结构:一个类之上的类称为父类,下层的类称为子类。这种层次结构的一个重要性质就是继承性。父类可以产生子类,子类可以继承父类中的属性和方法,且这种继承具有传递性。一个类可以继

4、承其上层的全部父类中的属性和方法。这样某个类的对象除了具有这个类所描述的性质外,还具有类等级中该类的上层的全部父类所描述的一切性质。 在面向对象的继承特性中,还有一个单重继承和多重继承的概念。单重继承是指一个类只有一个单一的父类。多重继承是指一个类可以有一个以上的父类。Java不支持多重继承,但可以通过一个类实现多个接口的方法来完成多重继承的功能。 类的继承的好处:利用了代码的可重用性,减少了程序中的冗余信息 3.多态性: 多态是指通过方法重写,一个类可以具有多个相同名字的方法,由参数个数和类型对它们加以区分。通过方法重写,子类可以重写父类的某些方法,使其具有自己的特征。重写可以隐藏父类的方法

5、,使子类具有了自己的具体实现。 父类和子类可以有相同名字的属性和方法,在程序的执行期间,对对象某一属性的查找是从该对象类所在层次开始,沿着类等级逐渐向上进行的,把第一个找到的属性作为所要的属性。因此,底层可以屏蔽高层的属性。 4.2 类 类是Java中最基本的复合数据类型,是组成Java程序的基本要素。创建一个新类就是创建一个新的数据类型,实例化一个类就得到一个对象. 类有两种基本成分:属性和方法,又称成员变量和成员方法。 类的成员变量可以是基本数据类型或数组,也可以是复合数据类型。 类的方法用于处理该类的数据,类中的方法与其他语言中函数的区别:Java中的方法只能是类的成员,只能在类中定义。

6、 4.2.1 类的定义格式:修饰符 class 类名 extends 父类名 implements 接口名 类属性声明; 类方法声明; 说明:(1)class表示类定义开始,类名第一个字母通常大写 (2)修饰符用来说明类的特殊性质,分为访问控制符和类型说明符, 访问控制符用来说明类能被哪些对象引用(public),类型说明符有 abstract和final,表示抽象类和最终类 (3)关键字extends表示继承,后面跟一个父类名 (4)关键字implements表示该类实现了接口,一个类可以实现多个 接口,接口使得类可以实现多重继承 属性的说明:修饰符 变量的数据类型 变量名初始值;修饰符 类

7、名 对象名new 类名(参数列表);类的属性修饰符有访问控制符,static,final,volatile,transient方法的说明:修饰符 返回值类型 方法名(形参说明)throws 异常1,异常2, 局部变量说明; 执行语句组; 类的方法修饰符包括:访问控制符,static,final,synchronous,native返回值可以是简单变量也可以是复合对象,若无返回值,则用void方法的名字最好体现方法的功能,常采用动词加宾语的形式,首字母小写形参表示要传递到方法体内的变量,形参可以有多个,也可为空;形参可以是简单的数据类型,也可以是复杂数据类型;对于复杂数据类型的 参数对象,传递的

8、是对象在内存中的地址。 4.2.2 修饰符1.访问控制符包的概念:包由一组类组成,它如同文件夹一样将各种类组织在一起.包中的类没有严格的某种关系,只是为了方便管理而将它们放在一个包中 访问控制符规定了类、属性和方法可以被程序的哪些部分访问和调用(1)类访问控制符:public和默认形式 public:公共类,表示它能被其他的任何类访问。一个包中的类相互 可见,可以互相访问,但不在同一个包中的类相互间是不可见 的。若要访问,则需要用import将该类引入,但引入的必须是 public类。另外,含有main( )方法的类必须是公共类 默认:表示该类只能被同一个包中的类访问,而不可以被其他包中的 类

9、访问。即使用import引入,也不可以。(2)属性方法访问控制符: public,private,protected,private protected,默认 public:修饰的属性和方法是公共的属性和方法,若类也是public,则这 些属性和方法可以被所有的类访问。由于面向对象设计中的封 装性的要求,公共的属性应尽量减少,可通过公共的方法间接访问 private:私有访问控制符,经它修饰的属性和方法只能被类自身的方法访 问和使用,它对属性和方法进行了最高级别的保护.多数用来修饰 属性,其他类需通过该类中的公共方法来访问这些属性.这些公共 的方法为这些属性提供了一个统一的接口,体现了面向对象

10、思想。protected:保护访问控制符,它修饰的属性和方法比private修饰的有较大 的可见域,可以被同一个包中的其他类,不同包中的子类以及该类 自身访问和引用,主要是为了让子类能够方便地访问父类private protected:私有保护访问控制符,只能被该类自身和子类访问和引用.既保证了子类对父类访问的方便性,又提高了使用的安全性。默认: 只能被同一个包中的其他类访问和引用修饰符类自身子类包不同包非子类public private protected private protected default 2.关键字static 前面提到的很多关于一个类访问其他类的属性和方法,都是指创建了

11、这个类的对象后,以对象的形式对类的属性和方法进行访问,但是在很多情况下需要直接调用类的属性和方法。 static所修饰的属性和方法为静态的属性和方法。通常,static所修饰的属性的取值,对所有对象都是相同的,任何一个对象对其修改,必然会影响到同一类中其他对象,而对于static所修饰的方法,在没有创建类的对象的情况下就可以对其进行访问。 static修饰的属性和方法在类被加载内存时就开辟了内存空间,而并不是在创建一个对象时创建的。因此这些属性和方法必然要成为类中所有对象共有的属性和方法。 静态属性和方法可以用类名直接调用,如java.lang包中的类System中的属性和方法都是静态的。 S

12、ystem.out.println( ),out是System类中一个属性,它含有一个方法println( ) 3.其他修饰符(1)abstract:抽象修饰符,在类的继承中使用,它修饰的类不能被实例化(2)final:最终修饰类,它修饰的类不能被继承,方法不能再进行重载(3)volatile synchronized:异步控制修饰符 volatile修饰属性,多个并发线程共享的变量,使各线程对该变量的访 问保持一致。 synchronized用于声明在任何时候都只能有一个线程可以执行的一段 代码或一个方法。(4)native:修饰方法,表示该方法不是用java编写的 4.2.3 构造函数 构

13、造函数是类的一种特殊方法,java中每个类都有构造函数,它的功能是为类的对象定义初始化状态,若在类中没有提供构造函数,则使用默认的构造函数,默认的构造函数没有参数,属于父类。若父类中没有提供构造函数,则会产生编译错误。(例:A406.java) 构造函数的名称必须与类名相同,且不能有返回值,创建对象时就要用构造函数,用new来调用它 同一个类中可以有多个构造函数,名称相同,而参数不同,它们以参数的个数和类型不同来区分。 关键字this的使用: 在构造函数或其他函数中有时会用到关键字this,代表当前对象。在类的成员函数中,若要使用本类的属性和方法,前面加this,但常可省略 class X i

14、nt a; void show( ) void method( ) a=5; /等价于this.a=5; show( ); /等价于this.show( ); 在某些情况下,在方法体中若局部变量与类的成员变量同名,而此时又需要使用成员变量,就必须使用this关键字加以区分。 class Y int a; int b; void init(int x,int y) int a=3; this.a=x; b=y; /等价于this.b=y; this省略 当使用默认的构造函数时,由系统默认初始化对象的成员变量 数值型 0 boolean false char 0 对象 null例:PersonIn

15、fo.java 4.2.4 main函数 它表示一个Java程序的起点,main函数必须放在一个类中定义.一个应用程序可以包含一个或多个类,但必须有一个且只能有一个类中要定义main函数,作为程序的入口. main函数没有返回值,有一个字符串数组参数: public static void main(String args) 方法体; 为了提高Java程序的灵活性,Java程序可以带一个或多个命令行参数,这些参数作为字符串一次性存放在args数组的各个元素中.例:Maintest.java 4.3 对象4.3.1 对象的创建1.声明一个对象变量 在Java中,有3个数据类型:基本数据类型(pr

16、imitive type);引用类型(reference type)和null类型.引用类型包括类类型(含数组)及接口类型;null类型没有名字,其值只有null,它可以赋值给任何引用类型.例: Person p1,p2; Dog d1,d2; String s;注: (1)p1,p2,d1,d2,s仅仅是一个引用类型的变量,而并不是对象 (2)为了区别对象本身和对象变量,引入了句柄的概念,句柄是引用类型 的变量标识符 (3)抽象类和接口不能创建对象,但可以声明很多个抽象类或接口的句 柄 2.创建一个对象 创建指生成一个真正的对象,常常使用new表达式语句.例: new A( ); /创建引用

17、类型A的一个对象 new String(“Hello”); /创建一个内容为Hello的字符串对象注: (1)创建对象的同时,要进行一系列复杂的对象初始化工作 (2)对象被创建时,才真正的产生3.句柄与对象 声明句柄与创建对象是可以相互独立存在的 public class A407 private String s; /句柄声明 public static void main(String args) String str; /句柄声明 System.out.println(new A407().s); /对象创建 / System.out.println(str); / str未初始化 Ja

18、va中常常将两者结合成一个语句,即把new表达式的值赋值给句柄 n public class A408n private String s;n public static void main(String args)n A408 a=new A408();n System.out.println(a.s);n String str= new String(这是字符串对象);n a.s=hello ,+str;n System.out.println(str);n System.out.println(a.s); n n 4.3.2 对象初始化 创建对象与对象初始化是同时进行不可分割的.对象初始

19、化就是给新对象的所有成员变量赋值,从而设定对象的初始状态.1.默认初始化和赋值初始化 创建对象时会为对象分配一定大小的内存空间,并同时为所有成员初始化一个默认值,以确保在分配空间的过程中对象的成员变量不会意外地拥有随机值. 当然,在声明成员变量之后,也可以给它指定一个初始值,即赋值初始化2.构造器初始化 即调用构造函数对成员变量进行初始化,构造函数存在的意义就在于创建出不同初始状态的同类对象.例:A410.java3.初始化块 初始化块是进行复杂初始化的另一个手段.它出现在类体中,与成员变 量,方法,构造器平起平坐.它们如同被放在类的每一个构造器的开头一样被执行,多个块则按它们在类中的顺序执行

20、.例:A411.java 4.3.3 对象的使用1.基本概念 两个交互的对象称为客户端与服务器关系,客户端按照服务器接口的格式发送消息. 接口格式即方法的类型签名:方法头中有返回值类型,方法名,形参列表,异常列表等,我们把形参列表类型和返回值类型的下面的格式称为方法的类型签名:例 String addt(A a, int b) 的类型签名是:AintString 在发送消息时,消息参数必须与Aint匹配,而保存消息返回值的变量必须与String匹配. 在客户端看来, 类型签名就是接口的一切,不必知道接口的实现细节. 例:A412.java利用消息的发送与响应,简单描述父母通过邮局将钱送到孩子的

21、手中.2.消息的传递 消息传递是指请求一个服务器对象去执行一项特定行为的过程. 例:aPostoffice.remittanceServe(500,child)是一个消息传递表达式,包括三个部分:句柄, 服务接口, 实参列表 4.3.4 对象的清除1.对象的内存分配 最重要的内存分配方式有两种:一种是在stack中分配,用于为局部变量分配内存;一种是在heap中分配,用于为全局变量分配内存. Java中对象的生命周期不存在作用域限制,因此永远在heap中分配. 如下例: n例:class Carn void honk(int n)n System.out.println(按喇叭+n +下);n

22、 n n public class A413n public static void main(String args)n Car c;n n Car c777=new Car(); n c777.honk(3) ;n /System.out.println(c777);n c=c777; /搬到作用域外试试n /* c777作用域的终点处*/n /c=c777;n c.honk(5) ;n n 2.垃圾收集器 一个对象变得没有办法使用所有指向该对象的句柄都失效,它就不再有存在的必要,则此对象就成为垃圾.为了减轻程序员的负担,Java系统提供垃圾收集器. 垃圾收集器(GC)在后台运行,它会定时

23、查看所有对象,需要说明的是:(1)GC是周期性地运行,因此对象的清除并不是在所有指向它的句柄都被 移去之后立即进行(2)GC只有在heap空间紧张时才立即投入工作(3)对象除了占据heap空间外,还使用了一些非内存资源如打开的文件 等,而GC并不能完全释放这些资源,因此,Java提供finalize()方法,用来 进行对象相关的一些清除操作.但是由于不能确定GC何时回收垃圾对 象,因此程序员很少使用finalize()方法. 4.4 数组 Java语言中,数组是独立的类,有其自身的属性和方法,不是变量的集合.4.4.1 数组声明: 数组类型 数组名 ; 数组类型 数组名 ; 数组类型 数组名;

24、 数组类型 数组名; 数组类型可以为int, float, boolean, char, double, String, Object例:int int_Array ; float float_Array ; char char_Array ;注:通过上述声明,只是建立了一种数组的引用,并没有对数组元素分配内存,在对数组使用前必须利用new语句为数组分配内存,确定数组中元素的个数,并赋初值.4.4.2 数组的创建和初始化(1)数组的创建将给数组分配内存空间,并确定数组元素的个数一维数组: 数组名=new数据类型数组元素个数 或声明同时创建数组 数据类型 数组名 =new 数据类型数组元素个数

25、或数据类型 数组名=new数据类型数组元素个数二维数组: 数组名=new 数据类型数组元素个数1数组元素个数2 例: int_Array=new int32; char_Array=new char32; 4.4 数组(续)(2)数组初始化一维数组初始化: 数组名下标=元素值;二维数组初始化: 数组名下标1下标2=元素值;例: int_Array12=3; char_Array3=c; 也可以将声明、创建、初始化用一条语句来完成一维: 数据类型 数组名 =元素值1,元素值2,元素值i;二维: 数据类型 数组名 =元素值1,元素值2,元素值i*j;例: int int_Array =1,2,3,

26、4,5,6; char char_Array =A,B,C;4.4.3 获得数组大小一维数组: 整型变量=一维数组名称.length; 二维数组: (1)获得行数: 整型变量=二维数组名称.length; (2)获得列数: 整型变量=二维数组名称第一维度下标.length;程序举例: A414.java A415.java YanghuiTriangle.java 4.4.4 与数组有关的系统函数1.数组复制 System.arraycopy()public static void arraycopy(Object src,int srcPos,Object dest, int destPos

27、,int length)例:arraycopy(source,0,dest,0,x)表示复制源数组中从下标0开始的x个元素到目标数组,从目标数组的下标0对应的位置开始存放。 例:TestArrayCopy.java2.数组排序Arrays.sort()格式:Arrays.sort(数组变量名)功能:将元素由小到大排序,结果仍然放在源数组中例:ArrSort.java 4.5 包 包是面向对象程序设计的重要特色之一,包在很大程度上体现了OOP的封装机制.它把一组类和接口封装在一个包内,这为管理大量的类和接口提供了方便,也有利于类和接口的安全.4.5.1 Java系统程序包 Java提供了大量的类

28、,为了方便管理,分为若干个程序包,又称为类库,或API(Application Program Interface,应用程序接口)包,API包一方面提供丰富的类和方法供编程人员使用,另一方面又负责和系统软硬件打交道,实现用户程序的功能. Java API包一般以”Java”或”Javax”开始,常用的包有 l java.applet 提供了创建applet所需要的所有类l java.awt.* 提供了创建用户界面以及绘制、管理图形、图像的类l java.io 提供了实现系统输入、输出的类l java.lang.* Java编程语言的基本数据类型类库l java.math 提供了简明的整数算术以

29、及十进制算术的基本函数l java.util 包含一些实用工具类,如定义系统特性,使用与日期日 历相关的函数 4.5 包(续)4.5.2 创建包 默认情况下,系统会为每一个java源文件创建一个无名包,这个包中的类不能被其他包中的类所引用和访问;用户自己也可以创建有名字的包,实际上创建包就是创建文件夹,包创建之后,使用的格式如下: package pkg1.pkg2.pkg3 .;注: package语句必须放在java文件的第一行例: package mypackage; public class Myclass2 class Myclass1 4.5 包(续)注:(1)编译Myclass2

30、.java之前先在当前目录下新建一个文件夹,名字为mypackage(2)编译后将生成的类文件(Myclass1.class,Myclass2.class)放到mypackage文件夹中,此时文件的名称即为mypackage.Myclass2,类的源码(.java文件)可能会影响执行,将其删除或移走(3)使用java命令执行程序时,用如下格式: java mypackage.Myclass2例:Myclass2.java 4.5 包(续)4.5.3 程序包的引入为了使用Java提供的包中的类以及自己定义的包中的公共类,有两种方法:(1)给出类全名: PackageName.ClassName obj=new PackageName.ClassName();(2)用import语句导入需要的类: import pkg1.pkg2.pkg3. . .classname | * ; 例: import java.awt.*; import javax.swing.JApplet; 注:将要被引入的类的最上层包的父目录必须位于classpath下,才能保证其他的类在任何位置能够引入该类。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!