【精品】java实用教程第5讲初识面向对象(可编辑.ppt

上传人:1595****071 文档编号:86272602 上传时间:2023-04-14 格式:PPT 页数:31 大小:1.01MB
返回 下载 相关 举报
【精品】java实用教程第5讲初识面向对象(可编辑.ppt_第1页
第1页 / 共31页
【精品】java实用教程第5讲初识面向对象(可编辑.ppt_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《【精品】java实用教程第5讲初识面向对象(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】java实用教程第5讲初识面向对象(可编辑.ppt(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Java实用教程第5讲初识面向对象第5讲 初识面向对象面向过程意在分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候依次调用这些函数。面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术,它具有封装性、继承性及多态性三大特点。5.1 面向过程程序设计与面向对象程序设计面向过程程序设计与面向对象程序设计的根本不同在于:面向过程程序设计中属性和行为是分开的,而面向对象程序设计中属性和行为含在单个对象中。面向对象程序设计的有三大

2、特点:(1)封装性封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。(2)继承性继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。例如,知更鸟属于飞鸟类,也属于鸟类。就像图5中描绘的那样,这种分类的原则是,每一个子类都具有父类的公共特性。(3)多态性多态是面向对象程序设计的另一个重要概念

3、。多态的意思是事物具有不同形式的能力。举个例子,对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。5.2 创建新的数据类型创建新的数据类型就必须借助关键字class,新类型的名字必须遵循Java中标示符的命名规则,如:class NewTypeName /类的主体新类型在命名时,尽量保持Java的风格,即首字母要大写,如果名字有多个单词组成的话,每个单词的首字母都要大写,尽量做到“见名知意”。类名后面的一对花括号“”之间的部分是类体,类体中可以定义数据域和动作。Java

4、使用变量表示对象的属性,使用方法表示对象的行为,如:/Circle.javapublic class Circle double radius=2.0;void setRadius(int newRadius)radius=newRadius;double getRadius()return radius;double getArea()return radius*radius*Math.PI;名为Circle的类已经完成,现在可以用它来创建对象了,如:Circle c=new Circle();5.3 类的成员类是创建对象的模板,是同一类对象的抽象,对象的属性和行为都应该在类中得到体现。所以

5、,类中定义了两种类型的成员:成员变量和成员方法5.3.1 成员变量根据有无static修饰符修饰,成员变量又分为类变量(静态变量)和实例变量。(1)有static修饰的变量称为类变量,也叫静态变量。此种类型的变量存储于内存中的静态存储区,在类被加载时得到初始化,即使没有任何对象被创建。(2)没有static修饰的变量称为实例变量。此种类型的变量存储于堆中对象的空间内,在创建对象时被初始化。:class GraduatedStudent int age;static int grade;在Student类中,age为实例变量,属于对象所有,存储于每个对象的空间中,所以每个对象可以由不同的年龄。g

6、rade为类变量,所有使用GraduatedStudent类创建的对象共同所有,所有对象都有共同的年级。5.3.2 成员方法同类变量和实例变量的区别相同,根据有无static修饰符修饰,成员方法又分为类方法(静态方法)和实例方法。(1)有static修饰的方法称为类方法,也叫静态方法。即使没有任何对象被创建,也可以被调用。(2)没有static修饰的方法称为实例方法。只有对象被创建后,才能通过对象的引用来调用。5.4 构造方法创建对象时,关键字new需要配合构造方法一起使用。构造方法是一种特殊的方法,其作用就是初始化,即为对象的属性赋值。构造方法有以下特点:(1)构造方法的名字必须与类的名字相

7、同;(2)构造方法没有返回类型;(3)构造方法可以重载。现在再回到Rectangle类,可以使用多种方法创建Rectangle类的对象,即为Rectangle定义多个构造方法。5.5 通过引用访问对象要给新创建的对象在内存(堆)中分配空间,它们可以通过引用类型的变量来访问5.5.1 引用类型和引用类型变量在Java中的引用类型,是指除了基本的变量类型之外的所有类型,所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失)。基本的变量类型只有一块存储空间,这块空间分配在stack中;而引用类型有两块存储空间:一块在stack中,用于存放

8、引用类型的变量,另一块在heap中用于存放对象一个类是程序员自己定义的类型,就是一种引用类型,任何使用该类声明的变量都可以引用(指向)该类的一个实例。如:Rectangle r1=new Rectangle();r1为Rectangle类型的引用类型变量,它可以指向Rectangle类的实例。5.5.2 引用类型变量和基本类型变量的区别每个变量都代表一个“存储值”的内存地址。变量的声明实际上就是告诉编译器这个变量可以存储什么类型的值。对于基本类型的变量,其内存储的值是基本类型值。而引用类型变量其内存储的是对象在堆中的存储地址值。例如变量a为基本类型,而b为引用类型,定义如下:int a=10;

9、Rectangle b=new Rectangle();则,a和b的区别如图5.2所示:图5.2 基本类型变量和引用类型变量区别图类的成员变量也可以是引用类型的,如Pupil类中的name:public class Pupil String name;int age;上例中的name只是被声明,并没有被赋值,当创建Pupil的对象时,name被初始化为null。类的成员变量也可以是引用类型的,如Pupil类中的name:public class Pupil String name;int age;上例中的name只是被声明,并没有被赋值,当创建Pupil的对象时,name被初始化为null。5

10、.5.3 点语法创建对象后,怎么使用其成员呢?这就要借助点语法了。Java使用引用变量后加“.”来访问这个引用变量所指向的对象中的成员,如:Pupil p=new Pupil();p.age=10;System.out.println(p.name);5.5.4 再论参数传递在3.2.3节中,我们讨论了Java中参数的传递,得出结论:Java中参数传递的是值,只不过基本数据类型传递的是数值,而复合数据类型传递的是地址值。在Java中,基本数据类型之外的所有类型都属于复合数据类型,所以除基本数据类型传的是数值外,其它类型传递的都是地址值,也就是引用值。下面代码展示了对象作为参数传递:/Objec

11、tParaPass.javaclass MyClassint a=10;public class ObjectParaPass static void testPass(MyClass m)m.a=m.a+10;public static void main(String args)MyClass m1=new MyClass();System.out.println(传递前:m1.a=+m1.a);testPass(m1);System.out.println(传递后:m1.a=+m1.a);ObjectParaPass.java的运行结果为:传递前:m1.a=10传递后:m1.a=20但下

12、面的程序又使我们陷入迷惑:/StringParaPass.javapublic class StringParaPass static void testPass(String s)s=s+end!;public static void main(String args)String s=Hello;System.out.println(传递前s=+s);testPass(s);System.out.println(传递后s=+s);StringParaPass.java的运行结果为:传递前s=Hello传递后s=Hello按照3.2.3得出的结论,String类型的s应该属于引用类型。程序的

13、结果应该是:传递后s=Helloend!。5.6 关键字this关键字this表示“当前对象的引用”,总结起来有以下几种用法:(1)区分同名的局部变量和成员变量当一个类的成员变量的名字与这个类中某个函数中的局部变量的名字相同时,可用this区分,下面的程序展示了这种用法:/TestThisOne.javapublic class TestThisOne int i=10;TestThisOne(int i)this.i=i;void printI()System.out.println(i=+i);public static void main(String args)TestThisOne

14、t=new TestThisOne(100);t.printI();(2)返回当前对象的引用this可以作为函数的返回值,如下面的程序所示:/TestThisTwo.javapublic class TestThisTwo int i=0;TestThisTwo increment()i+;return this;void printI()System.out.println(i=+i);public static void main(String args)new TestThisTwo().increment().increment().increment().printI();(3)在构

15、造方法中调用构造方法既然构造方法可以重载,那么使用一个构造方法创建对象时可以借助另外一个构造方法,这是必须借助this,示例代码如下:/TestThisThree.javapublic class TestThisThree int i=0,j=0;TestThisThree(int i)this.i=i;TestThisThree(int i,int j)this(i);this.j=j;void printIJ()System.out.println(i=+i+,j=+j);public static void main(String args)new TestThisThree(10,2

16、0).printIJ();5.7 对象数组第三讲中讲述了基本类型元素的数组,也可以创建对象类型的数组。示例代码如下:/ObjectArray.javaclass Studentint age;String name;Student()Student(int age,String name)this.age=age;this.name=name;void PrintInfo()System.out.println(name+的年龄是+age);public class ObjectArray public static void main(String args)Student stu=new

17、Student(18,Tom),new Student(20,Jim);for(int i=0;i stu.length;i+)stui.PrintInfo();5.8 数据的存储作为一个优秀的程序员,应该清楚自己创建的数据被存储在什么地方。有五个地方可以存储数据:(1)寄存器。寄存器存在于处理器的内部,存取速度最快,价格最高,数量有限。寄存器是由编译器根据需要分配,其不能由程序员通过代码控制,只能查看其状态。(2)堆栈(stack)。位于通用的RAM中,处理器通过堆栈指针控制它们。当需要分配一块新的内存时,堆栈指针便往后移动;需要释放内存时,指针则往前移动。这种方式速度快,仅次于寄存器,效率

18、高。但需频繁移动指针,限制了程序的灵活性,所以只能用于存放对象引用以及基本类型数据,不能用于存储Java对象。(3)堆(heap)。一种通用的内存空间,也位于RAM中,用来存放所有的Java对象。Heap不同于stack之处在于,编译器不需知道究竟要从heap中分配多少空间,也不需知道从heap上分配的空间究竟需要存在多久。因此,在heap上分配存储空间可以获得高度的弹性。当需要产生对象,只需在程序中使用new,那么执行的时候,便会从heap上分配空间。当然,你得为这样的弹性付出代价:从heap分配空间以及进行清理,要比在stack上花费更多的时间。(4)静态存储区和常量存储区。静态存储区域是

19、指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量,如静态数据变量,需要明确的是,Java对象不存储在这里,而只是把对象中的一些特殊元素放置于此。在Java中,由于常量(如圆周率)的值是稳定不变的,一般把其直接存储在代码内部。但在嵌入式系统开发中,会把常量跟代码分开来保存。这时常量被存入只读存储器(ROM)中。(5)非RAM存储。流对象和持久化对象是完全存活于程序之外的,它们不受程序的控制。流对象可以被转换为字节流,存储到另一台机器上。被持久化的对象可以被存储在硬盘上。当如以上几种存储方式的存取速度从高到底依次为:寄存器、堆栈、堆、其它。5.9 本讲小结本讲主要介绍了面向对象程序设计与面向过程程序设计的区别,成员变量、成员方法和构造方法,以及对象的引用,对象数组和数据的存储讲后练习 1、简述面向过程程序设计和面向对象程序设计的异同2、编程说明面向对象程序设计的三个特性。3、静态变量和实例变量的区别是什么?4、简述this关键字的作用。5、简述Java中数据的存储。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com