java学习课件 第六章 面向对象程序设计.ppt
《java学习课件 第六章 面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《java学习课件 第六章 面向对象程序设计.ppt(151页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 面向对象程序设计n学习目标 n本章要点n上机练习 n习 题学习目标 n本章介绍Java语言中的面向对象程序设计的基本概念,包括类的定义、类的属性和方法,以及类的访问,还介绍对象的定义、对象的引用和参数传递,详细讲解类的基本方法和内部类。通过本章的介绍,读者能熟练使用面向对象的基本技术,为以后的学习打下坚实的基础。本章要点 n类的定义、属性和方法n类的修饰符和访问n对象的定义n方法的参数传递n类的基本方法n内部类的定义和使用方法类 n类表示一类事物的集合,作为Java的基础,其封装了Java中各个概念的基本信息。类也是一个抽象概念,不能代表一个具体的实例,同时,类是对象的集合,具体表现形
2、式就是对象,也称为对象的模板。Java的系统类库中定义了大量的不同功能的类均可以直接使用。思考:汽车类的组成n因此,我们创建一个汽车类,则可表示为:类和对象 类是定义对象的模板,用来描述一类是定义对象的模板,用来描述一类事物的共有属性和功能。类事物的共有属性和功能。对象是一个具体的事物。对象是一个具体的事物。例:例:汽车汽车类类某辆汽车(对象)某辆汽车(对象)学生学生类类某个学生(对象)某个学生(对象)窗口窗口类类某个具体的窗口(对象)某个具体的窗口(对象)继承关系(一般和特殊)继承关系(一般和特殊)面向对象应考虑的问题:n该问题中有哪些类、哪些对象n类、对象的属性和方法n类之间具备的关系:如
3、继承等类n类的定义 n 属性和方法 n类的访问 n 应用举例类和对象是类和对象是JavaJava的核心和本质。它们是的核心和本质。它们是JavaJava语言的基础,编写一个语言的基础,编写一个JavaJava程序,在某程序,在某种程度上来说就是定义类和创建对象。定义种程度上来说就是定义类和创建对象。定义类和建立对象是类和建立对象是JavaJava编程的主要任务。编程的主要任务。必须先定义类,才能创建对象。必须先定义类,才能创建对象。每一个每一个class,class,都是现实世界的抽象。都是现实世界的抽象。类的定义 n一个完整的类包括类头和类体两个基本部分。类头由关键字class、类名和修饰符
4、构成,负责类的声明,类体由属性(成员变量)和方法构成,负责类的实现,属性与方法统称类的成员。类的定义n修饰符 class 类名 extends 父类名 implements 接口名nn类体的内容n类的定义n修饰符定义了类的访问权限,可以是public、abstract和final也可以省略。nclass表示类定义的开始,后面是新定义的类名,类名必须是合法的标识符,一般类名的首字母应该大写并能体现该类的功能或特征。类的定义n extends 父类名表示该类是某一个父类的子类。n implements 接口名表示该类实现的借口,一个类可以同时实现多个接口。属性和方法 n通常一个完整的类都包含属性和
5、方法两个部分。n属性 n方法 属性n类的属性,也称为成员变量,描述了该类内部的信息,是类的静态属性。属性可以是简单变量,也可以是对象、数组或其他复杂数据结构。n1)定义属性为简单变量的格式n定义属性为简单变量的格式为:修饰符 数据类型 成员变量名=值;属性n成员变量的修饰符指明了该变量的访问权限,修饰符可以是:public、private、protected、static和final。其中final用来说明一个最终成员变量,在程序中不能修改该变量的值,因此该变量又称为常量;static用来说明类静态成员变量,类变量在内存中有共同的分配空间。属性n在一个类中,定义在方法之外的变量称为成员变量,成
6、员变量的作用范围是整个类,并且不受定义位置的影响。我们通常将成员变量的定义集中地放在类体的开始部分。属性n定义在方法之中的变量称为局部变量,作用范围是其所属的方法。成员变量和局部变量的数据类型可以是简单数据类型或复杂数据类型中的任何一种。方法n方法用来规定类属性方面的操作,是类的主要组成部分。应用程序的类由一个主方法和若干个子方法构成,主方法调用其他方法,其他方法间互相也可以调用,同一个方法可以被一个或多个方法调用多次。Java应用程序中,程序的运行从main()方法开始,调用其他方法后又回到main()方法,在main()中结束整个程序的运行。方法n方法有两种:一是标准方法,由Java AP
7、I提供,可以实现许多功能;二是用户自定义的方法,以实现专门的功能。n方法的定义格式为:方法n修饰符 返回类型 方法名(参数列表)throws 异常名nn局部变量声明n执行语句n方法n结果的返回类型可以是简单数据类型或复杂数据类型中的任何一种。n方法名必须是合法的标识符,方法的参数项可以是缺省的、一个或者多个,如果存在多个参数,参数间使用逗号隔开。类的定义-例1定义描述“人”的类:成员变量:姓名、性别、年龄;class PersonString name,sex;int age;void sing()System.out.println(I can sing!);void dance()Syst
8、em.out.println(I can dance!);void out()/成员变量的操作只能放在方法中成员变量的操作只能放在方法中System.out.println(name:+name);System.out.println(age:+age);注意:一个类中可以没有注意:一个类中可以没有main方法,此时它不是方法,此时它不是Java的的application应应用程序,也就是不能被用程序,也就是不能被Java虚拟机直接调用。虚拟机直接调用。成员方法:唱歌,跳舞,输出对 象 n在在Java中类只有实例化为对象后才能被使用。中类只有实例化为对象后才能被使用。n对象是在执行过程中由其所
9、属的类动态产生的,一个类可以生成多个不同的对象。创建和使用对象1 1、声明对象声明对象 类名类名 对象名;对象名;2 2、分配内存(对象的实例化)、分配内存(对象的实例化)对象名对象名=new=new 类构造方法名(类构造方法名(实参表实参表););3 3、使用对象(对象的成员变量及方法的访问)、使用对象(对象的成员变量及方法的访问)对象名对象名.方法名、对象名方法名、对象名.成员变量名成员变量名声明和初始化可以合并:声明和初始化可以合并:类名类名 对象名对象名=new=new 类的构造方法名(类的构造方法名(实参表实参表 ););说明:说明:构造方法名与类名相同,如果一个类中未定义构造方法,
10、系统自动定义。构造方法名与类名相同,如果一个类中未定义构造方法,系统自动定义。使用对象class Person.public static void main(String args)Person p;p=new Person();p.name=zhangsan;p.age=20;p.sing();p.out();栈内存堆内存p 0 x30000 x30000 age.new person()产生的对象对象的内存模型 引用数据类型与引用变量引用变量:引用数据类型(数组、类)声明的变量为引用变量,引用变量本身并不存放数据,而只是存放数据的地址。Java的内存分配Java把内存划分成两种:栈栈内存
11、、堆内存内存、堆内存1.Person p;声明对象p时,在栈内存中分配空间,用来存放一个地址,此时地址未指向任何数据。对象的内存模型2.p=new Person();时,调用的是构造方法,首先在堆内存中为对象分配存储空间,并对各成员变量进行初始化,数值型为0,布尔型为false,引用型为null;然后取得这个存储空间的地址(引用),将其“交给”引用变量p,以后对这个对象的操作全由p去控制。对象的内存模型3.多次使用new便会创建多个不同的对象。4.对象的内存模型成员变量n栈内存:保存的是对象的名字,局部变量n堆内存:对象的具体内容n数据区:静态属性,常量对象的引用n可以把内存看做一栋楼房,而对
12、象就是里面的一间房子。每个房间的门牌号相当于对象所占内存的存储地址。当使用关键字new来实例化每一个对象时,系统会为每一个成员变量分配一块内存空间,并返回这个对象的一个内存地址引用(即“门牌号”)给这些成员变量,因此每个对象都能彼此独立的引用成员变量。构造函数 n构造函数的作用和定义 构造函数也称为构造方法,用来对对象进行初始化。构造函数的名字必须和类名完全相同,并且没有返回值,甚至连表示无返回值的空类型(void)也没有。构造函数一般应定义为public。默认构造函数 n一般而言,每个类都至少有一个构造函数。如果程序员没有为类定义构造函数,Java虚拟机会自动为该类生成一个默认的构造函数。n
13、要特别注意的是,如果程序员定义了一个或多个构造函数,则自动屏蔽掉默认的构造函数。class Person int id;int age;Person(int n,int i)id=n;age=i;阅读代码,画出相应的内存图nTest11.java构造函数课堂练习 class Point class Point double x,y,z;double x,y,z;Point(doublePoint(double _x,double _y,double _z)_x,double _y,double _z)x=_x;x=_x;y=_y;y=_y;z=_z;z=_z;void void setX(do
14、ublesetX(double _x)_x)x=_x;x=_x;double double getDistance(PointgetDistance(Point p)p)return(x-return(x-p.xp.x)*(x-)*(x-p.xp.x)+(y-)+(y-p.yp.y)*(y-)*(y-p.yp.y)+(z-)+(z-p.zp.z)*(z-)*(z-p.zp.z););public class public class TestPointTestPoint public static void public static void main(Stringmain(String a
15、rgsargs)Point p=new Point(1.0,2.0,3.0);Point p=new Point(1.0,2.0,3.0);Point p1=new Point(0.0,0.0,0.0);Point p1=new Point(0.0,0.0,0.0);System.out.println(p.getDistance(p1);System.out.println(p.getDistance(p1);p.setX(6.0p.setX(6.0););System.out.println(p.getDistance(p1);System.out.println(p.getDistanc
16、e(p1);习 题1.1.按以下要求创建一个学生类按以下要求创建一个学生类(Student)(Student),编程并上机调试:编程并上机调试:1)1)其成员变量其成员变量:姓名:姓名(name)(name)、年龄年龄(age)(age)、身高身高(height)(height)、体重体重(weight)(weight)2)2)成员方法:成员方法:setAgesetAge用于给变量用于给变量ageage赋值赋值3)3)成员方法(成员方法(outout):):输出各成员变量的值。输出各成员变量的值。4)4)构造方法:构造方法:通过参数传递,分别通过参数传递,分别对对namename、height
17、height、weightweight初始化。初始化。5)5)最后最后,创建这个类的对象,并完成对成员变量赋值和输,创建这个类的对象,并完成对成员变量赋值和输出的操作。出的操作。引用变量的参数传递(引用传参)n引用变量的参数传递中,用户使用参数调用函引用变量的参数传递中,用户使用参数调用函数时,传递给函数的参数是该实际参数本身,数时,传递给函数的参数是该实际参数本身,而不是实际参数值的副本。对引用参数的修改而不是实际参数值的副本。对引用参数的修改将会改变参数变量本身。将会改变参数变量本身。n Java 是传值还是传引用,问题主要出在对象是传值还是传引用,问题主要出在对象的传递上,因为的传递上,
18、因为 Java 中简单类型没有引用。中简单类型没有引用。引用变量的参数传递(引用传参)n什么是引用什么是引用 简单的说,引用其实就像是一个对简单的说,引用其实就像是一个对象的名字或者别名象的名字或者别名(alias),一个对象在,一个对象在内存中会请求一块空间来保存数据,根内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,不会直大小也不等。访问对象的时候,不会直接访问对象在内存中的数据,而是通过接访问对象在内存中的数据,而是通过引用去访问。引用去访问。引用变量的参数传递(引用传参)n什么是引用什么是引用 可以把引用
19、想象为类似可以把引用想象为类似 C 语言中语言中指针的东西,引用指示了对象在内指针的东西,引用指示了对象在内存中的地址存中的地址只不过我们不能够只不过我们不能够观察到这个地址究竟是什么。观察到这个地址究竟是什么。引用变量的参数传递(引用传参)n如果我们定义了不止一个引用指向同如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定因为引用也是一种数据类型,需要一定的内存空间来保存。但是它们的值是相的内存空间来保存。但是它们的值是相同的,都指示同一个对象在内存的中位同的,都指示同一个对象在内存的中位置。置。引用变量的参
20、数传递(引用传参)n比如比如 StringBuffer a=new StringBuffer(Hello );StringBuffer b=a;这里,这里,a 和和 b 是不同的两个引用,我们使用了两个定义是不同的两个引用,我们使用了两个定义语句来定义它们。但它们的值是一样的,都指向同一语句来定义它们。但它们的值是一样的,都指向同一个对象个对象“Hello”。n如果如果 b=new StringBuffer(“World”);b=a;这种情况不是改变了这种情况不是改变了 World 这一对象的值,而是改这一对象的值,而是改变了它的引用变了它的引用 b 的值使之指向了另一个的值使之指向了另一个
21、StringBuffer对象对象 a。引用变量的参数传递(引用传参)public class Test public static void main(String args)StringBuffer a=new StringBuffer(Hello);StringBuffer b=a;b.append(,World);System.out.println(a is +a);引用变量的参数传递(引用传参)运行结果:运行结果:a is Hello,World 这个例子中这个例子中 a 和和 b 都是引用,当改变了都是引用,当改变了 b 指示的对象的值的时候,指示的对象的值的时候,从输出结果来看,
22、从输出结果来看,a 所指示的对象的值也改变了。所以,所指示的对象的值也改变了。所以,a 和和 b 都指向同一个对象即包含都指向同一个对象即包含 Hello 的一个的一个 StringBuffer 对象。对象。这里有两个要点:这里有两个要点:1、引用是一种数据类型,保存了对象在内存中的地址,这种类型即、引用是一种数据类型,保存了对象在内存中的地址,这种类型即不是我们平时所说的简单数据类型也不是类实例不是我们平时所说的简单数据类型也不是类实例(对象对象);2、不同的引用可能指向同一个对象,换句话说,一个对象可以有多、不同的引用可能指向同一个对象,换句话说,一个对象可以有多个引用,即该类类型的变量。
23、个引用,即该类类型的变量。引用变量的参数传递(引用传参)public class Test public static void test(StringBuffer str)str.append(,World!);public static void main(String args)StringBuffer string=new StringBuffer(Hello);test(string);System.out.println(string);引用变量的参数传递n【例6-6】值传递的应用,注意x,y对应的值的变化(光盘:源文件第6章例6-6.txt)。引用变量的参数传递n出现这种结果的主
24、要原因是x.append(y),实际上是改变了x引用的内容,由于a和x引用同一个对象,所以a的引用也会随之改变。而y=x只是改变operate()中y的引用,这个是局部的,不会影响到main()中b的引用。复习n类的定义n成员变量说明n成员方法说明n对象的创建和使用n创建对象n通过对象引用成员变量和成员方法n构造方法n构造方法与一般成员方法的区别nP106,构造方法不是void型本讲要点n方法的重载n成员方法的重载n构造方法的重载nStaticnthisn继承n重写方法的重载 在一个类中可以有多个方法具有相在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,同的名字,但这些方法的
25、参数必须不同,即或者是参数的个数不同,或者是参数即或者是参数的个数不同,或者是参数的类型不同。的类型不同。同名的方法可以有不同的方法体从同名的方法可以有不同的方法体从而完成不同的任务,当调用方法时,系而完成不同的任务,当调用方法时,系统会根据调用方法的实际参数类型和个统会根据调用方法的实际参数类型和个数自动调用相应的方法,这就是数自动调用相应的方法,这就是方法的方法的重载。重载。方法的重载class Heshangvoid dashui(String s)System.out.println(s+挑水喝挑水喝);void dashui(String s1,String s2)System.ou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java学习课件 第六章 面向对象程序设计 java 学习 课件 第六 面向 对象 程序设计
限制150内