




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/ 类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例在的该类事物的每个个体,因而也称实例(instance)。 如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。 /class Personint age;void shout()System.out.println(“oh,my god! I am “ + age);nage是类的属性是类的属性 ,也叫类成员变量,也叫类成员变量 。nshout是方法也叫类的成员函数。是方法也叫类的成员
2、函数。nshout方法可以直接访问同一个类中的方法可以直接访问同一个类中的age变量变量 ,如果一个方法中有与成,如果一个方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量。再是成员变量。 /对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理这类事物对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理这类事物出现的问题,在出现的问题,在Java语言中通过语言中通过new操作符来创建对象。准确地说,可以在操作符来创建对象。准确地说,可以在Java语言中使用语言中使用new操
3、作符调用构造方法创建对象操作符调用构造方法创建对象。当用户使用当用户使用new操作符创建一个对象后,可以使用操作符创建一个对象后,可以使用“对象对象.类成员类成员”来获取对象的来获取对象的属性和行为。对象的属性和行为在类中是通过类成员变量和成员方法的形式来表属性和行为。对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,所以当对象获取类成员,也就相应地获取了对象的属性和行为。示的,所以当对象获取类成员,也就相应地获取了对象的属性和行为。/ 在在Java语言中尽管一切都可以看作对象,但真正操作标识符实质上是一个引用,语言中尽管一切都可以看作对象,但真正操作标识符实质上是一个引用,那么
4、引用究竟在那么引用究竟在Java中是如何体现的?来看下面的语法。中是如何体现的?来看下面的语法。语法如下:语法如下:类名类名 对象引用名称对象引用名称比如一个比如一个Book类的引用可以使用的代码如下所示:类的引用可以使用的代码如下所示:Book book;/在在Java语言中有两种对象的比较方式,分别为语言中有两种对象的比较方式,分别为“=”运算符与运算符与equals()方法。实方法。实质上这两种方式有着本质区别,下面举例说明。质上这两种方式有着本质区别,下面举例说明。.c1c3c2堆c1对象c2对象abcabcc1和c3引用指向同一内存地址/每个对象都有生命周期,当对象的生命周期结束时,
5、分配给该对象的内存地址将每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收,在其他语言中需要手动回收废弃的对象,但是会被回收,在其他语言中需要手动回收废弃的对象,但是Java拥有一套完整的垃拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的占用圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的占用内存的资源。内存的资源。/Person p1 = new Person();执行完后的内存状态执行完后的内存状态/当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化当一个对象被创建时,会对其中各种类型的成员变量自动进
6、行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的面的Person及前面讲过的数组。及前面讲过的数组。 /创建新的对象之后创建新的对象之后,我们就可以使用我们就可以使用“ 对象名对象名.对象成员对象成员 ”的格式,来访问对象的成员的格式,来访问对象的成员(包括属性和方法)(包括属性和方法) class TestPersonpublic static void main(String args) Person p1 = new Person();Person p2 =new Person();p1.age = -30;
7、p1.shout();p2.shout();上面程序运行的内存布局如下图上面程序运行的内存布局如下图 /n我们也可以不定义对象的句柄,而直接调用这个对象的方法。我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象,这样的对象叫做匿名对象, 如:如:new Person().shout(); n如果对一个对象只需要进行一次方法调用,那么就可以使用如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。匿名对象。 n我们经常将匿名对象作为实参传递给一个函数调用。我们经常将匿名对象作为实参传递给一个函数调用。 /n如果外面的程序可以随意修改一个类的成员变量,会造如果外面
8、的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过自己的方法去修改这个属性。部随意修改,只能通过自己的方法去修改这个属性。 n在定义一个类的成员(包括变量和方法)时,使用在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。不能被其他的类中的方法所调用。 /n为了实现良好的封装性
9、,我们通常将类的成员变量声明为为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过再通过public的方法来对这个变量进行访问。对一个变量的操作,的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是来读取这个成员变量操作,另外一个是setXxx()用来对这个成员用来对这个成员变量赋值。变量赋值。n一个类通常就是一个小的模块,我
10、们应该让模块仅仅公开必须要让一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。支军队的例子来说明这种
11、效果。 /n隐藏类的实现细节;隐藏类的实现细节;n让使用者只能通过事先定制好的方法来访问数据,可让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;以方便地加入控制逻辑,限制对属性的不合理操作;n便于修改,增强代码的可维护性;便于修改,增强代码的可维护性;/n构造方法的特征构造方法的特征l它具有与类相同的名称;它具有与类相同的名称;l它不含返回值;它不含返回值;l它不能在方法中用它不能在方法中用return语句返回一个值语句返回一个值注意:在构造方法里不含返回值的概念是不同于注意:在构造方法里不含返回值的概念是不同于“void”的,在的,在定义构造方法时
12、加了定义构造方法时加了“void”,结果这个方法就不再被自动调,结果这个方法就不再被自动调用了。用了。n构造方法的作用:当一个类的实例对象刚产生时,这个类的构造构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个工作的代码。这就好像我们规定每个“人人”一出生就必须先啼哭,一出生就必须先啼哭,我们就可以在我们就可以在“人人”的构造方法中加入完成的构造方法中加入完成“啼哭啼哭”的程序代码,的程序代码,于是每个于是每个“人人”一出生就会自动完成一出生就会
13、自动完成“啼哭啼哭”,程序就不必再在,程序就不必再在每个人刚出生时一个一个地告诉他们要每个人刚出生时一个一个地告诉他们要“啼哭啼哭”了。了。 /n和一般的方法重载一样,重载的构造方法具有不同个数或不同类型和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:该调用哪个构造方法了。产生对象的格式是:new 类名类名(参数列参数列表表) ;n重载构造方法可以完成不同初始化的操作,重载构造方法可以完成不同初始化的操作, 如:如:p3=ne
14、w Person(“Tom”,18);语句,会做这样几件事:创建指定类的新实例语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量方法,最后将实例对象的首地址赋值给引用变量p3。 /n在在java每个类里都至少有一个构造方法,如果程序员没有在一个每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没
15、有任何代码,法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。即什么也不做。 n由于系统提供的默认构造方法往往不能满足编程者的需求,我们由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。该类定义了构造方法,系统就不再提供默认的构造方法了。 n声明构造方法,如无特殊需要,应使用声明构造方法,如无特殊需要,应使用public关键字,在我们前关键字,在我们前面例子中,可以使用面例子中,可以使用private访问修饰符吗?访问修饰符吗? /n类与对象之间的关系是总体和个体关系。类与对象之间的关系是总体和个体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- TCZSYSJLXH 002-2024 全国艺术行业职业能力水平评价团体标准
- 太原单柱式标志杆施工方案
- 吉安市防水补漏施工方案
- 浦东新区2024学年度第一学期期末教学质量检测高三语文试卷
- 生态茶园修复工程施工方案
- 建筑工程竣工验收检测报告
- 右安门钢结构施工方案
- 简支钢箱梁桥施工方案
- 酉阳四星级酒店施工方案
- 陶铝吸音板施工方案
- 中国女排演讲ppt
- GB/T 12928-2008船用中低压活塞空气压缩机
- 冲压工艺及冲压质量
- PS 第7章-路径和矢量图形课件
- 立体构成-线立体课件
- 住院总岗位职责
- 眼科常用药课件
- 中药封包疗法课件
- 初中体育与健康人教7~9年级第7章 球类正面双手垫球教学设计及教案
- 展示空间设计(案例)
- 急症手术预见性护理
评论
0/150
提交评论