Java第三章面向对象技术.ppt
《Java第三章面向对象技术.ppt》由会员分享,可在线阅读,更多相关《Java第三章面向对象技术.ppt(87页珍藏版)》请在三一办公上搜索。
1、Java程序设计,面向对象技术,内容,类和对象类的创建对象的创建类的封装类的继承类的多态性数组字符串,3.1 类和对象,类是一个模型,它定义了一类对象的共同特征和行为;对象是类的一个实例。类的组成:成员变量:类内用于存储对象各项数据的变量,它们反映对象的状态,也称为属性;成员方法:描述对成员变量的操作。同一个类的不同对象可具有不同的状态,而对象中的方法用于改变自身的状态;,3.2.1 类定义,使用一个类之前必须先定义一个类类定义的组成部分:类声明、类体类定义的格式:类修饰符 class 类名 extends 父类名 implents 接口名 类体,3.2.2 类体,类体中定义了该类的所有成员变
2、量和方法,这些成员变量和方法称为类的成员。,class 类名 成员变量;成员方法;,class Point int x,y;void init(int ix,int iy)x=ix;y=iy;,3.2.2.1 成员变量的声明,格式:修饰符 类型 变量名=初值;,修饰符:说明成员变量的访问权限类型:成员变量的类型变量名:Java合法标识符声明时可以给出变量的初始值可同时声明多个成员变量(不推荐)public int a=1,b=2;public int a=1;public int b=2;,public class Stack private int items;public int item
3、s().,3.2.2.2 成员函数的声明,格式修饰符 返回值类型 函数名(参数表)函数体,成员函数的声明必须放在class内必须给出函数的返回类型,若无返 回值类型为void,public class Stack private int items;public int items().,3.3.1 对象的创建声明,对象的声明格式:类型(class/interface名,)对象名;String s;对象的声明并不为对象分配内存,对象的初始值为null;此时不能访问对象的成员。,class Num int i;Num m;m.i=0;,3.3.1 对象的创建实例化,使用关键字new创建一个对象,
4、并返回对象的引用(相当于对象在内存中的地址);可以在声明对象的同时创建对象;每一个对象拥有其成员的单独拷贝;,Num m=new Num();Num n=new Num();m.i=10;n.i=100;,Num m;m=new Num();m.i=10;,class Num int i;,class SimplePoint int x;int y;public class TwoSimplePoint public static void main(String args)SimplePoint p1=new SimplePoint();SimplePoint p2=new SimplePo
5、int();p1.x=10;p1.y=20;p2.x=100;p2.y=200;System.out.println(p1=+p1.x+,+p1.y);System.out.println(p2=+p2.x+,+p2.y);,0 xFCA0,0 xFC00,p1,p2,对象1,对象2,内存,内存,3.3.2 构造函数,构造方法的特征构造方法的名称与类的名称相同构造方法没有返回值(不同于void返回值)可以有多个构造方法,但每个构造方法的参数个数或类型需不同构造方法的作用创建对象:对象的创建通过调用对象的构造方法实现;初始化对象:在构造方法添加初始化成员变量的代码,从而实现对成员变量的初始化(即
6、,对象的初始化)。注意:Java中可以不定义构造方法,此时系统会自动为该系统生成一个默认的构造方法。这个构造方法的名字与类名相同,它没有任何形式参数,并将成员变量初始化为默认值(数值类型为0或0.0,boolean类型为false,复合数据类型为null),构造函数示例,NewPointTest.java,3.3.3 对象的使用,访问成员变量对象名.成员变量名调用成员方法对象名.成员方法名,NewPoint p2=new NewPoint(10);p2.x=10;,NewPoint p3=new NewPoint(100,200);p3.printLoc();,3.3.4 对象的销毁,Java
7、的垃圾回收机制当没有任何引用能指向一个对象时,这个对象将被JVM释放。(示例:NoReference.java)void finalize()(教材P73页错误)JVM在释放一个对象之前,将调用该对象的finallize方法,因此可以在该方法中进行特定地清除操作。,3.3.5 再谈变量 实例变量和局部变量,实例变量:定义在类体之内,方法体之外的变量.局部变量:定义在方法体之内的变量以及方法的参数(形参).唯一性:在同一作用域中不能定义两个同名局部变量;在同一个类中不能定义两个同名的实例变量;但在一个类中可以定义与实例变量同名的局部变量,此时在该局部变量的作用域内,此局部变量将隐藏同名的实例变量
8、.,实例变量和局部变量的唯一性示例(1)实例变量和局部变量的唯一性示例(2)TestInstanceVar.java,public class InstanceAndLocal int x,y,z;/double x;void init(int x,int y)int z=0;/*for(int x=0,y=0,z=0;z5;z+)x+;y+;*/,初始化局部变量在使用前必须初始化;实例变量可以不显式地初始化,此时Java编译器会将实例变量初始化为默认值数值类型的实例变量(byte short int long char float double)初始化为0(或0.0);boolean类型的实
9、例变量初始化为false;复杂数据类型的实例变量(用类作为数据类型定义的实例变量)初始化为null.实例变量可以在定义时直接初始化,也可以在构造函数中初始化;,实例变量和局部变量初始化示例(1),public class InitVar int i;double d;boolean b;String s;/*void noInit()int n;n+;*/public static void main(String args)InitVar obj=new InitVar();System.out.println(i=+obj.i);System.out.println(d=+obj.d);S
10、ystem.out.println(b=+obj.b);System.out.println(s=+obj.s);,实例变量和局部变量初始化示例(2),public class InitInstanceVar int i=10;int j;int k=10;InitInstanceVar()j=10;k=20;public static void main(String args)InitInstanceVar obj=new InitInstanceVar();System.out.println(i=+obj.i);System.out.println(j=+obj.j);System.o
11、ut.println(k=+obj.k);,生命期局部变量的生命期从定义之处开始,到该变量定义所在代码块结束而结束;实例变量属于对象,它随着对象的存在而存在,随着对象的消亡而消亡;对象什么时候诞生?当用new调用一个类的构造函数时,该类的一个对象被创建(诞生);对象什么时候消亡?当没有引用能够指向一个对象时,该对象将被”垃圾回收”(消亡).,实例变量和局部变量生命期示例,public class VarLiving int i;public static void main(String args)VarLiving obj=new VarLiving();for(int j=0;j10;j+
12、)System.out.println(j=+j);/System.out.println(j=+j);System.out.println(i=+obj.i);obj=null;/System.out.println(i=+obj.i);,3.3.6 引用变量和赋值(1),变量类型为简单数据类型赋值是传递数值的拷贝,int i=1;int j=i;i=2;System.out.println(i=+i);System.out.println(j=+j);,1,i,1,j,2,i,3.3.6 引用变量和赋值(2),变量类型为复合数据类型(类)赋值是传递对象的引用,SimplePoint p1=
13、new SimplePoint();p1.x=10;p1.y=20;SimplePoint p2=p1;p2.x=100;p2.y=200;System.out.println(p1.x+”,”+p1.y);,class SimplePoint int x;int y;,0 xFCA0,p1,3.3.7 向方法传递参数,方法参数的传递传值:基本数据类型传值调用不会改变所传参数的值;传引用:对象、数组传引用调用可改变所传对象的内容;示例:PassingParam.java输出结果:,x=100 y=200value=10i=0,3.3.8 返回对象,对于对象,与向方法传递参数类似,方法返回的是对
14、象的引用;当一个方法返回对象时,对象将一直存在直到没有对它的引用为止,此时该对象将被回收。因此一个对象不会因为创建它的方法终止而被销毁。示例:TestReturnObj.java,3.4 封装,面向对象技术的特性封装继承多态性封装:将属性和方法装配到类中,并加以访问控制隐藏类的实现细节迫使类的使用者通过接口访问类内的数据减少类与类间的耦合性,增强代码的可维护性,3.4.1 访问控制,Java推出了“访问控制修饰符”的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。4种访问级别:public:共有的缺省访问控制private:私有的protected:保护的两种修饰位置:
15、修饰类和修饰成员,3.4.2 public修饰符修饰类,一个类被声明为public类,表明它可以被所有的其他类所访问和引用,这里的访问和引用是指这个类作为整体是可见和可使用的,程序的其他部分可以创建这个类的对象、访问这个类内部可见的成员变量和调用它的可见的方法。一个类作为整体对程序的其他部分可见,并不能代表类内的所有属性和方法也同时对程序的其他部分可见,前者只是后者的必要条件,类的属性和方法能否为所有其他类所访问,还要看这些属性和方法自己的访问控制符。一个Java文件中可以有多个类,但只能有一个被修饰为public,如果java文件中有public类,该文件的名字必须和该public类同名。,
16、3.4.3 public修饰符修饰成员,被public修饰符修饰的成员为公共的,所有class中均可访问该成员。,public class Alpha public int iampublic;public void publicMethod().,class Beta void accessMethod()Alpha a=new Alpha();a.iampublic=10;/a.publicMethod();/,3.4.4 private修饰符,声明为private的变量和方法是私有的,除了声明该变量或方法的class,而不能被任何其他类,包括该类的子类访问。,class Alpha pr
17、ivate int iamprivate;private void privateMethod()iamprivate=0;,class Beta void accessMethod()Alpha a=new Alpha();a.iamprivate=10;/X a.privateMethod();/X,3.4.5 实例成员和类成员,一般情况下定义的成员为实例成员,在成员类型前加static定义一个类成员,class AnIntegerNamedX int x;public int x()return x;,class AnIntegerNamedX static int x;static p
18、ublic int x()return x;,3.4.5.1 实例成员的特点,每一个对象拥有该实例成员变量的独立拷贝每一个实例成员方法,作用于该对象的实例成员变量在类定义之外访问实例成员必须通过该对象,class A public int x;public void set(int i)x=i;,A a,b,c;a=new A();b=new A();c=new A();a.x=0;b.x=1;c.x=2;a.set(5);b.set(6);c.set(7);System.out.println(a.x);System.out.println(b.x);System.out.println(c
19、.x);,3.4.5.2类成员变量,该类的所有对象共享一个类成员变量,class A public static int x;public staticvoid set(int i)x=i;,A a,b,c;a=new A();b=new A();c=new A();a.x=0;b.x=1;c.x=2;a.set(5);b.set(6);c.set(7);System.out.println(a.x);System.out.println(b.x);System.out.println(c.x);,3.4.5.3 Static代码块,static代码块写在class内,而不是方法内static
20、代码块在class第一次被加载时执行,即使用class前被执行。static常用于初始化某些static成员变量;在static代码块中不能访问实例变量。示例:TestStaticVariable.java运行结果:,静态变量被初始化!调用PointStatic类的构造函数!一共产生了1个PointStatic类的对象!,3.4.5.4类成员方法,类成员方法只能访问类成员变量和类成员方法,class A public static int x;public int y;public static void set(int i)x=i;/y=i;/X,3.4.5.5类成员的访问,在类外访问类成员
21、可通过类名实现,class A public static int x;public int y;public static void set(int i)x=i;,A a,b,c;a=new A();b=new A();c=new A();A.x=2;a.y=0;b.y=1;c.y=2;A.set(5);System.out.println(a.x);System.out.println(b.x);System.out.println(c.x);,3.4.5.6 类成员与实例成员区别总结,声明方式不同关联性不同(最重要的区别)访问方式不同,3.4.6 方法的重载,重载(overloading
22、)的定义:可以用相同的方法名但不同的参数表来定义方法(参数表中参数的数量、类型或次序有差异),这称为方法重载。意义:同一方法名,对不同类型与个数的参数组合可有不同的实现及其输出类型。可以在同一类中用同名方法重载另一方法可以在子类中用同一方法重载父类的同名方法示例:OverloadDemo.javaOverloadConsDemo.java,3.4.7 this关键字的作用,指代当前对象本身;示例:TestUseThis.java当方法的参数或方法中的局部变量的名字与类的实例变量名相同时,实例变量将被隐藏。使用this引用它便可以访问被隐藏的实例变量。示例:TestUseThis.java(修改
23、构造方法的参数名与实例变量名相同)调用本类的构造方法:this(参数列表)示例:ThisDemo.javathis是调用方法时自动传递给方法的隐式参数,它是调用方法的对象的引用;示例:NewPointTest.java,int x=0,int y=0,void printLoc()0 xFEA0,p1,int x=10,int y=10,int x=100,int y=200,void printLoc()0 xFEA0,void printLoc()0 xFEA0,0 xFEA0,this 说明,p3,p2,3.5 类的继承(1),继承模拟了客观世界中子孙和祖先的关系,类的继承(2),每一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 第三 面向 对象 技术
链接地址:https://www.31ppt.com/p-6510080.html