《面向对象编程基础》PPT课件.ppt
《《面向对象编程基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《面向对象编程基础》PPT课件.ppt(71页珍藏版)》请在三一办公上搜索。
1、第5章 面向对象编程基础,本章要点:对象及对象句柄 类 构造器、方法 访问控制符 静态关键字 重载 包 注释及添加文档,5.1 对象,5.1.1 什么是对象有3个主要的特征:对象的行为(behavior)这个对象能做什么,也就是我们可以让这个对象完成什么样的功能。比如自行车可以载我们去想去的地方,节省体力。对象的状态(state)当通过一个操纵对象的方法时,对象所保持的一种包含特定属性的状态。比如我们可以通过扭转车头使自行车拐弯;刹车时,可以让自行车减速或停下来。对象的标识符(identity)可以通过标识符,区别具有相同行为或类似状态的对象。说到自行车,可以有很多种样子的,很多生产厂家的,都
2、可以说是自行车,那如何能区分我使用的这一辆呢?可以根据颜色、生产厂家及自行车号牌等与其他的自行车区分。,5.1.2 对象句柄变量名是内存地址(栈)的一个别名,对于基本类型来讲,它的值就是存放在这个内存地址的空间内,对于对象类型来讲,它的值是一个指向实际对象的一个地址(堆),而真正的对象是存放于堆中,我们就可以理解为:这就是一个对象的句柄。我们可以想像一下我们是如何用遥控器(对象句柄)操纵电视机(对象)的。只要你拥有这个遥控器,你就可以操纵电视机,一旦需要“换频道”或“增大声音”,你操纵的是遥控器(句柄),由遥控器去操纵电视机(对象),你也可以将这个遥控器交给其他的人(按址传递),别人也就有操纵
3、这个对象的权力了,无论有多少个人来操纵遥控器,电视机始终是唯一的(对象只有一个)。,此外,即使没有电视机,你仍然可以拥有遥控器,也就是说,你可以只有句柄,没有实际性的对象(电视机)与句柄(遥控器)相关联。例如:String str;这里只是拥有了一个对象句柄,句柄(str)并没有与任何对象内容相关联。这时,你去操纵句柄(str),并向它发送一条消息(操作),系统会提示你错误。所以我们建议读者在创建对象句柄时,一定不要忘记将句柄与实际的对象内容相关联(也就是对象变量的初始化)。,5.1.3 对象变量的初始化当创建一个对象句柄时,总是希望马上进行相应的初始化工作,也就是将句柄与内容关联在一起。在J
4、ava中,这是一个非常简单的过程,它是通过new关键字来完成对象的创建过程的。可以理解为new就是新建的意思,它就是向内存堆中申请一个空间,将这个对象内容放到这里,然后将内容与对象句柄(存在于栈中)关联起来。是谁起到的作用呢?那就是等号(“=”),例如:String str=new String(Hello);String是Java中用到最多的字符串对象,它生成一个具体的内容“Hello”,我们把这个过程称为对象的实例化,并将这个实例与句柄(str)通过等号关联在一起。,5.2 类,5.2.1 类的含义类在Java中用class关键字表示,在第3章中我们已经强调过,要想声明一个类,必须使用cl
5、ass关键字。类是对象的抽象,类是模板,类是一类事物经过抽象所共有属性的集合。比如说我们现在声明一个汽车类:public class Car 接着进行一个类的实例化,也就是说创建一个类的实例:new Car();/这样就产生了一个类的实例,也就是一个具体的对象一个类的实例是针对一个具体的对象的,它是一些具体属性的集合。,5.2.2 设计自己的类1.需求分析(1)对于一个学生类(Student class),作为整个系统的最核心的类,我们希望它能包括学生公有的基本信息:学生姓名、学号、性别、出生年月、专业和籍贯等。(2)作为学生类的实例,我们希望能通过设置或访问来修改这些学生的不同信息。,2.编
6、写代码例5-1程序清单:StudentTest.java/*学生类,包括学生的基本信息*/public class StudentTest public static void main(String args)Student tom=new Student(Tom,20020410);tom.setStudentSex(man);tom.setStudentAddress(America);System.out.println(tom.toString();class Studentprivate String strName=;/学生姓名private String strNumber=;
7、/学号private String strSex=;/性别private String strBirthday=;/出生年月private String strSpeciality=;/专业private String strAddress=;/地址,public String toString()String information=学生姓名=+strName+,学号=+strNumber;if(!strSex.equals()information+=,性别=+strSex;if(!strBirthday.equals()information+=,出生年月=+strBirthday;if
8、(!strSpeciality.equals()information+=,专业=+strSpeciality;if(!strAddress.equals()information+=,籍贯=+strAddress;return information;,5.2.3 分析你的类1.构造器通过关键字new来生成对象的实例,是通过构造器(constructor)来实现的。那究竟什么是构造器呢?简单的说,构造器是同类名相同的特殊方法。让我们研究一下学生类的构造器:public Student(String name,String number)strName=name;strNumber=numbe
9、r;当构造一个学生类的实例时,学生类的构造器就被启动,它给实例字段赋值。,2.方法提到方法(method)都是针对于某一个类的,也就是说方法都是类中的程序段。方法究竟是做什么用的呢?在探讨方法之前我们有必要先探讨一下另外一个概念封装。封装:所谓封装,就是把数据和行为结合在一个块中,对于对象的使用者隐藏了数据的实现过程,对象的使用者只能通过特定的方法访问类的实例字段。一个特定的对象是类的一个实例,一个对象实例中的数据叫做对象的实例字段,操作实例字段的函数和过程称为方法。这个实例保持属于它本身的特定的值,这些值被称为对象的当前状态,任何想改变对象当前状态的动作必须通过调用对象的方法。对于封装,我们
10、重点强调的是,绝对不允许方法直接访问除它自己的实例字段以外的其他的实例字段。程序只能通过对象的方法来与对象的数据发生作用。封装的实际作用就是一个“黑盒子”的作用,对于使用者,只需要知道对象的输出数据与输入数据,而不再去关心、也没必要关心数据的内部具体实现流程。对于封装的详细解析我们在本书后面有专门的介绍。,方法的定义:学生类中的方法都很简单,可以通过方法访问类的私有实例字段,因为任何实例字段都可以被它们所在的类的方法访问。在一个类中,声明方法的格式如下:访问标识符 返回值类型 方法名(变量类型 变量名称,)比如在刚才我们声明的学生类中,声明了11个方法,我们就以籍贯为例来分析一下方法的实质。p
11、ublic String getStudentAddress()return strAddress;public void setStudentAddress(String address)strAddress=address;,设置器和访问器在Java API文档中,我们经常可以发现类似于上面学生类中的很多以get或set开头的方法。get方法只是查看对象的状态,并没有改变对象的任何状态,例如:public String getStudentName()return strName;public String getStudentNumber()return strNumber;public
12、 String getStudentSex()return strSex;public String getStudentBirthday()return strBirthday;,3.使用多个源文件(1)通过统配符来调用编译器javac Student*.java 或javac*.java这时,与统配符相匹配的所有源文件都会被编译成类文件。(2)编译主文件也可以采用如下的方式编译主文件:javac StudentTest.java,4.访问控制符我们在前面几章中,经常看到在类、方法、实例字段前有public、private等,这就是访问控制符。所谓访问控制符,就是控制某个类、方法、实例字段被
13、外界所能看到或访问到的范围。在Java中访问控制符主要有3个:public(“公开”)、private(“私有”)和protected(“受保护”)。在这里,我们重点探讨前两个,对于portected等到后面的章节再探讨。public:当使用关键字public时,就意味着在它后面的内容被声明为适用于所有人使用。在所有的访问控制符中,public的访问权限最大,那它究竟是如何被访问的,我们先不做探讨,只有把它同其他控制符进行比较,我们才能真正体会到它的意义。,private:关键字private是访问控制符中被访问范围最小的控制符,它是私有的。它意味着,除非是个特定的类,并且只有从这个类的方法里
14、才能访问到的,否则没有人能访问这个成员。比如在我们的学生类中:private String strName=;/学生姓名private String strNumber=;/学号private String strSex=;/性别private String strBirthday=;/出生年月private String strSpeciality=;/专业private String strAddress=;/地址,例5-2程序清单:StudentTest1.java/*学生类,包括学生的基本信息*/public class StudentTest1 public static void
15、main(String args)Student1 tom=new Student1(Tom,20020410);Student2 jack=new Student2(Jack,20030911);System.out.println(tom.toString();System.out.println(jack.toString();System.out.println(通过公开字段,修改实例字段值。);/tom.strName=唐僧;jack.strName=孙悟空;System.out.println(jack.toString();,class Student1 private Stri
16、ng strName=;/学生姓名 private String strNumber=;/学号 public Student1(String name,String number)strName=name;strNumber=number;public String getStudentName()return strName;public String getStudentNumber()return strNumber;public String toString()return 学生姓名=+strName+,学号=+strNumber;,class Student2 public Str
17、ing strName=;/学生姓名 public String strNumber=;/学号 public Student2(String name,String number)strName=name;strNumber=number;public String getStudentName()return strName;public String getStudentNumber()return strNumber;public String toString()return 学生姓名=+strName+,学号=+strNumber;,方法的私有性在设计一个类时,我们会使所有的实例字段
18、都是私有的,因为通过上面的程序示例,读者可以看出公开的数据是危险的。数据是这样的,那么对于方法呢?虽然在大多数的情况下,方法都是公开的,但私有的方法也是经常用到的。这些私有的方法只能被类中其他的方法调用。既然私有方法只能被类内的方法使用,为什么还要有私有方法呢?原因很简单,为了实现逻辑的分离。对于某些方法,我们有时需要进行复杂逻辑的分离,这种分离出来的逻辑只是对某个特定的方法有用,或者说对于类的使用者来说是没有意义的,在这种情况下,我们一般将方法声明为私有的。,5.静态字段与方法在我们所列举的示例中,可以看到main方法都被标记上static标识符。下面我就对static关键字进行深入探讨。静
19、态字段如果在一个类中,把一个字段声明为static(静态的),那么在这个类中只能有这么一个类字段,而每个实例都共享同一个字段。我们用示例来说明这个问题,比如,每个学生都有唯一的一个学号字段,这个学号字段不再需要人工输入,而是由程序自动计算的。我们追加一个静态字段nextNumber:,例5-3程序清单:StudentTest2.java/*学生类,包括学生的基本信息*静态字段的测试*/public class StudentTest2 public static void main(String args)int i;for(i=0;i 10;i+)Student tom=new Studen
20、t(Tom+i);if(i%2=0)tom.setStudentSex(man);else tom.setStudentSex(female);tom.setStudentAddress(America);tom.setStudentNumber();System.out.println(tom.toString();,public String toString()String information=学生姓名=+strName+,学号=+number;if(!strSex.equals()information+=,性别=+strSex;if(!strBirthday.equals()in
21、formation+=,出生年月=+strBirthday;if(!strSpeciality.equals()information+=,专业=+strSpeciality;if(!strAddress.equals()information+=,籍贯=+strAddress;return information;,静态常量类似于我们上面的定义的静态变量是不经常使用的。然而,静态常量却是很普遍的,例如我们经常使用的System.out。它在System类中被声明为:public class System public static final PrintStream out=;out静态字段
22、被声明为公开的,如果去掉static这个关键字,out就是类的实例字段。我们在访问控制符中强调过,将类中实例字段公开是一个不好的主意,因为每个人都可以修改公开的类实例字段,但是使用公开常量(final字段)却没有问题。因为out被声明为final是不可被更改的。,静态方法main方法就是一个静态方法,一个方法想变成静态方法,只要在前面加上static就可以了。静态方法可以说是一类特殊的方法,它并不操纵具体的对象,它同静态字段是类似的,是属于类的方法。因为静态方法不操纵具体的对象,所以在一个静态方法中不能访问类的实例字段,但可以访问一个自己类中的静态字段。例5-4程序清单:StaticMetho
23、d.java/*静态方法访问实例字段及静态字段*/public class StaticMethod int a=15;int b=2;public static void main(String args)System.out.println(a+/+b+=+(a/b);,静态方法的使用对于方法的使用,在前面已经有所讲述。对于静态方法的调用则是一种特殊的情况,它的使用是通过类名直接调用方法名。格式如下:类名.方法名(参数列);在下面我们将会学习Java中两个重要的类:Math类与Date类,会多次用到静态方法的调用。请读者深入体会。,工厂方法这节我们接触Java中一个非常重要的概念工厂方法。
24、对于工厂我们通常的理解就是生产产品的地方,这是非常正确的。对于Java程序设计来说,首先工厂方法就是生产对象的地方,也就是生产类的实例的地方。其次,它还是一个方法,这个方法的目的就是生产对象。到目前为止,读者只要记住工厂方法是创造对象的地方,通过工厂方法的调用可以得到一个类的实例。在以后的章节中我们会更加详细的探讨工厂方法。,main方法我们曾经多次接触到main方法,main方法是一个静态方法。通过前面的描述读者已经了解到静态方法不需要对象去调用。实际上,当程序开始执行时,还不存在任何对象。静态方法main执行后,开始创建所需要的对象。例如:我们在学生类中追加一个main方法。class S
25、tudent public static void main(String args)Student aStudent=new Student(沙和尚);aStudent.setAddress(通天河);,例5-5程序清单:StudentTest3.java/*学生类,包括学生的基本信息*/public class StudentTest3public static void main(String args)Student tom=new Student(Tom,20020410);tom.setStudentSex(man);tom.setStudentAddress(America);S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象编程基础 面向 对象 编程 基础 PPT 课件

链接地址:https://www.31ppt.com/p-5619413.html