Java面向对象编程基础.ppt_第1页
Java面向对象编程基础.ppt_第2页
Java面向对象编程基础.ppt_第3页
Java面向对象编程基础.ppt_第4页
Java面向对象编程基础.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章Java面向对象编程基础,4.1Java的类4.2类的成员变量与方法(类体),4.1.1类的基本结构4.1.2类首定义4.1.3Java源程序结构(略),4.1Java的类,类是组成Java程序的基本要素,是具有相同特征的多个对象的模板,它封装了这些对象的所有共同特征。对象是类的实例。类只是一个抽象的模型,利用这个抽象的模型可以构造具体的实例对象。,一个类由两部分组成:,4.1.1类的基本结构,类的例子,类首说明类体,publicclassPoint/定义点类publicintx;/成员变量说明,定义点的x坐标publicinty;/成员变量说明,定义点的y坐标publicPoint(intX,intY)/带参数构造方法,设置点的坐标x=X;y=Y;publicdoubledistance()/成员方法,计算到原点的距离returnMath.sqrt(x*x+y*y);,例4-1点类,publicclassStudent/定义学生类publicStringname;/学生姓名publicStringnumber;/学生编号privateintage;/学生年龄privateintmath,physics;/两门课程成绩publicStudent(Stringna,Stringnu,inta,intm,intp)name=na;number=nu;age=a;math=m;physics=p;publicvoidsetMath(intm)math=m;publicvoidsetPhysics(intp)physics=p;publicvoidgetMath()returnmath;publicvoidgetPhysics()returnphysics;publicintaverage()/计算平均成绩return(math+physics)/2;,例4-2学生类,类首定义格式如下:修饰符class类名extends父类名implements接口名列表类名是所创建的类的名字,可以是任意的Java标识符。根据Java命名的约定,一般地,类名的每个有意义的单词的首字母大写,其余字母小写。类的修饰符分为两类:访问修饰符:缺省(默认方式)、public非访问修饰符:abstract、final一个类可以同时有多个修饰符,但是不能有相同的修饰符,abstract和final也不能同时有。修饰符无先后顺序之分。修饰符及其它保留字的具体含义如下:,4.1.2类首定义,publicclassHello/类首publicstaticvoidmain(Stringargs)System.out.print(Hello!);,缺省(默认方式)这种类只能被同一个包中的类访问;public(公共)它修饰的类能被所有的类访问;abstract(抽象)它修饰的类不能被实例化,它可能包含有未实现的方法。final(最终)它修饰的类不能被继承,即不能有子类。extends(继承)该保留字用来表明新创建的类继承哪个类,被继承的类称为此类的父类。extends后面只能跟一个父类名称,因为Java中一个类最多能继承一个类(单继承)。implements(实现)该保留字用来表明这个类实现了哪些接口,接口名可以有多个。,4.2类的成员变量与方法(类体),类体中定义该类所有的成员变量和方法,其形式如下:/类体开始成员变量说明成员方法说明/类体结束类体中的变量和方法都是可选的,也没有先后顺序之分。(这与C+中的不同!C+中前面的函数中不可调用后面定义的函数,除非在前面有原型语句)。,1.成员变量说明2.构造方法说明3.创建类对象,4.成员方法说明5.成员方法调用.变量方法小结6.递归方法,成员变量的说明类似于方法的局部变量说明,所不同的是,成员变量定义在类中,是类成员的一部分,整个类都可以访问它。Java中成员变量说明形式如下:修饰符类型成员变量名1,成员变量名n;成员变量的类型可以是基本类型或类。成员变量名要符合Java的标识符规定。成员变量的修饰符也分为两类:访问修饰符:缺省、public、protected、private非访问修饰符:final、static修饰符的具体意义如下:,1.成员变量说明,访问修饰符:(1)访问修饰符缺省访问修饰符缺省时,成员变量只能被同一包(package)中的所有类访问,所以也称为包(package)变量。(缺省访问修饰符实际是friendly修饰符,但因为friendly不是Java语言的关键字,所以friendly修饰符不能显式说明。)(2)public(公共)public修饰的成员变量可以被程序中的任何类所访问。由于public成员变量不受限制,这易使类的对象引起不希望的修改,建议成员变量尽量不要使用public修饰符。,publicclassHellointn=1;/定义包变量npubliccharc=a;/定义公共变量cpublicstaticvoidmain(Stringargs)System.out.print(Hello!);,(3)protected(受保护)protected修饰的成员变量可以被本包及有继承关系的类自由访问。(4)private(私有)private修饰的成员变量只能在同一个类中使用。这种方式通常是最为安全的。,访问控制符限定了成员变量的访问权限。,非访问修饰符:(1)static(静态)用static修饰的成员变量叫静态变量(或类变量),而没有用static修饰的成员变量叫对象变量(或实例变量、非静态变量)。对象变量只能是属于某个对象的,当创建了类的一个对象后,该对象就拥有自己的对象变量;而静态变量是整个类所公有的,所以它不需要创建对象就可以直接访问。,publicclassHellostaticintn;/定义静态变量nintm;/定义对象变量mpublicstaticvoidmain(Stringargs)n=2;/访问静态变量nSystem.out.print(n);/访问静态变量nm=3;/对象变量不可如此访问,错误,(2)final(最终)final修饰的成员变量叫最终成员变量。这种变量在定义时就立即设定一个值(初始化),在以后程序的运行过程当中,其值将一直保持这个值不变。所以最终变量又称为常量。常量使用注意点:常量(最终成员变量)必须要立即初始化;这点与局部常量不一样,局部常量可以在以后再初始化。对于常量的任何赋值都将导致编译错误;无论是实例变量还是静态变量,都可被说明成常量。final修饰符和static修饰符并不冲突。,访问类的成员变量,需要使用点操作符“.”,而且静态变量和对象变量的使用方法是不同的。(1)静态变量的使用静态变量是属于整个类的,与类的对象无关,所以只需要通过类名就可访问,但也可以通过类对象名来访问。访问格式:类名.静态变量名或:类对象名.静态变量名注在定义静态变量的类内部访问该静态变量时:可省略类名或类对象名,即只需使用变量名即可访问!,成员变量使用方法,(2)对象变量的使用对象变量是属于类的对象的,要通过类对象名来访问。因此,只有在构造对象后才能访问到。访问格式:类对象名.对象变量名注在定义对象变量的类的内部的构造方法或对象方法中访问该对象变量时,可省略类对象名,即只需使用变量名即可访问!,classAstaticintax;intay;publicclassBstaticintbx;intby;publicstaticvoidmain(Stringargs)A.ax=5;bx=A.ax+2;/访问类变量(不需建对象)AA1=newA();/创建类A的一个对象A1BB1=newB();/创建类B的一个对象B1A1.ay=6;/访问对象A1的成员变量ayB1.by=A1.ax;/访问对象变量和静态变量System.out.println(A.ax+B.bx);/输出二变量的值System.out.println(B1.bx+B1.by);/输出二变量的和,例.成员变量访问,课堂练习,练习:下面程序中的类D有2个成员变量d1和d2,请在类C的主方法中完成如下工作:1)输出本类的静态变量cstr的值;2)给d1赋值88,然后输出;3)建立类D的一个对象D1,然后给D1的对象变量d2赋值99后输出。,publicclassCstaticStringcstr=这是类C的静态字符串变量cstr的值;publicstaticvoidmain(Stringargs)classDstaticintd1;intd2;,System.out.println(cstr);D.d1=88;System.out.println(D.d1);DD1=newD();D1.d2=99;System.out.println(D1.d2);,每当由类建立对象时都要调用该类特定的构造方法,在Java中,每个类都至少有一个构造方法。构造方法可以确保系统正确地构造类的对象,同时,构造方法也会对对象作初始化工作。构造方法说明形式如下:修饰符类名(形式参数列表)throws异常列表方法体修饰符与一般方法修饰符相同。,2.构造方法说明,构造方法不能像一般的方法那样被直接调用,它是在建立类的实例(对象)的时候被Java编译器自动调用的。当建立一个类的实例的时候,编译器主要完成以下二件事情:(1)为对象分配内存空间;(2)调用对象的构造方法,以便初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按指定的值初始化。一个类的构造方法可以有多个,它们都具有相同的方法名,即类名。编译器根据参数的类型来决定调用哪个构造方法,所以多个构造方法的参数必须个数或类型不同。构造方法分为缺省的构造方法和用户自定义的构造方法。,(1)缺省的构造方法如果类的定义中没有编写构造方法,Java系统会自动为用户提供一个,以确保每个Java类都至少有一个构造方法。它被称为缺省的构造方法。缺省的构造方法形式如下:public类名();/对象成员变量的初值按Java规定(2)用户定义的构造方法用户定义的构造方法可以带有或不带有参数,它主要实现这样的功能:当构造一个新对象时,类构造方法可以按用户的需要初始化对象中的实例变量的值。,定义了一个类后,就可以构造该类的对象了,类的对象也称为类的实例。创建对象包括三步:对象的说明、对象的实例化和对象的初始化。例如,下面的二个语句就包含了这三个步骤:Pointp1;/对象说明p1=newPoint(10,20);/对象实例化和初始化上面语句中,Point是一个点类,p1是一个变量(对象变量),new是一个操作符关键字,称为对象的实例化操作符。Point(10,20)是Point类的构造方法。这条语句实际上做了三件事情:说明说明(定义)了一个Point类对象p1;,3.创建类对象,(1)对象的创建,实例化用new操作符实例化一个Point类的对象,把存储空间分配给这个对象;初始化Point()是Point类的构造方法,用来确定这个对象的初始状态。上面的过程也可合成一个语句实现:Pointp1=newPoint(10,20);,对象的说明、对象的实例化和对象的初始化的语法格式是:分两步:类名对象名;对象名=new类构造方法名(实参表);合成一步:类名对象名=new类构造方法名(实参表);,(2)对象的使用,对象的使用就是对对象的成员变量和方法进行访问。使用的运算符是点操作符号“.”。访问格式是:对象名.变量名对象名.方法名(),注意:只有在构造了对象后,才能访问对象的成员变量及方法(静态的变量及方法除外)。,例:publicclassAintx;publicstaticvoidmain(Stringargs)Aaa=newA();/创建类A的一个对象aaaa.x=5;/访问对象aa的成员变量xSystem.out.println(aa.x=+aa.x);,例.类对象的创建及使用,classPointintx;/定义一个整型的对象变量xinty;/定义一个整型的对象变量yPoint(intx1,inty1)/构造方法x=x1;/在构造方法中访问对象变量直接用变量名y=y1;publicstaticvoidmain(Stringargs)Pointp1=newPoint(10,20);/构造类Point的对象p1System.out.println(点p1的坐标是:(+p1.x+,+p1.y+);/访问对象p1的变量x、y,在Java中,方法总是Java类的一个组成部分。通过类的方法,改变对象的状态。方法说明的格式如下:方法首部说明方法体,4.成员方法说明,publicclassHellopublicstaticvoidmain(Stringargs)方法首部System.out.print(“Hello!”);方法体,方法首部说明的形式如下:方法修饰符返回值类型方法名(形参列表)throws异常类列表方法修饰符同成员变量的一样分为两类:访问修饰符:缺省、public、protected、private非访问修饰符:static、abstract、final、native、synchronized访问修饰符的意义与成员变量的完全一样,非访问修饰符的意义如下:static修饰的方法为静态方法,又叫类方法;无static修饰的方法为对象方法;类方法是该类的所有对象共享的方法。abstract修饰的方法为抽象方法,无方法体;final修饰的方法为最终方法,不能由子类改变;,方法首部说明,synchronized(同步)修饰的方法执行之前给方法设置同步机制,实现线程同步;native修饰的方法为本地方法。方法名是Java中任意的标识符。按照命名的约定,方法名应该是有意义的动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。如果方法没有返回值,则用void表示。形式参数列表是可选的。形参类型可以是任意的Java类型,如果方法没有形式参数,就用一对小括号“()”表示。形式参数列表的形式如下:(类型形参名,类型形参名,)throws异常列表规定了在方法执行中可能导致的异常(第五章详细介绍)。,(1)方法体方法体是由一对大括号括起来的一段代码,格式如下:/方法体开始实现方法的代码段/方法体结束方法体也可以是一个分号“;”,表示无具体方法(方法还没有实现,即只是一个方法框架。当且仅当方法的修饰符中有abstract或native时,方法才可无方法体。(2)return语句return语句用于从当前方法中退出,返回到调用该方法的语句处继续程序的执行。其格式如下:,方法体,格式1:return表达式;格式2:return;格式1返回一个值给调用该方法的语句,返回值的数据类型必须与方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致格式2用在返回类型为void的方法中,使用该语句以结束方法,返回调用处。return语句通常用在一个方法体的最后,以退出该方法并返回一个值。在Java中,单独的return语句用在一个,法体的中间时,会产生编译错误,因为这时有一些语句执行不到。例如:intmethod(intnum)returnnum;将导致编译错误,因为它将使后面的语句执行不到可以通过把return语句嵌入到某些语句(如if-else)来使程序在未执行完方法中的所有语句时退出,例如:intmethod(intnum)if(num0)returnnum;可能执行,也可能不执行,取决于num的值,(3)静态方法和对象方法成员方法根据是否有static修饰而分为静态方法(类方法)和对象方法,其意义与静态变量、对象变量一样,即静态方法是属于整个类的,而对象方法是属于类中的某个对象的。静态方法是属于整个类的,并不属于类的哪个对象,所以静态方法的方法体中不能有直接与类的对象有关的内容,即静态方法的方法体有如下限制:静态方法中不能直接引用类的对象变量、对象方法,但可创建类的对象并通过对象来使用对象变量或对象方法;(2)在静态方法中不能使用super、this关键字。如果违反这些限制,就会导致程序编译错误。,和静态方法相比,对象方法几乎没有什么限制:(1)对象方法中可以直接引用对象变量和静态变量;(2)对象方法中可以直接调用对象方法和静态方法;(3)对象方法中可以使用super、this关键字。在程序设计中,一些通用的、公用型的方法与类的对象无关,因此常常被作为静态方法实现。Java类库中Math类,其中多数的数学运算操作都被定义成静态方法。因此,可以使用静态方法把一些通用的、公用型的方法放在合适的类中,从而很好地将它们组织起来。应用程序中的主方法main就是静态方法。,方法的调用与使用成员变量一样,需要使用点操作符“.”,并且同样要区分对象方法还是类方法。1.静态方法的调用静态方法是属于整个类的,与类的对象无关,所以只需通过类名就可访问静态方法,但也可以通过类对象名来访问。调用格式:类名.静态方法名(实参列表)或:类对象名.静态方法名(实参列表)注在定义静态方法的类内部调用该静态方法时,可省略类名或类对象名,即只需使用方法名和即可调用。如果包含静态方法的类被继承,那么在其子类中可以使用带有父类名的限定名称来访问该静态方法,也可以使用子类名的限定名称来访问该静态方法。,5.方法的调用,2.对象方法的调用类对象方法是属于类的对象的,要通过类对象名来调用。因此,只有在构造对象后才能调用到。调用格式:类对象名.类对象方法名(实参列表)注在定义对象方法的类的内部访问时:在定义对象方法的类的内部的构造方法或对象方法中调用该对象方法时,可省略类对象名,即只需使用方法名即可调用!,方法调用时的形参和实数的对应关系:方法调用时必须与方法说明时的方法首部格式一致,形参换成实参,实参是与形参类型一致的表达式。例如:方法首部:intf1(intx,chary,doublez)调用格式:f1(inta,charb,doublec)下面是一个方法调用使用的例子。,publicclassClassMethodpublicstaticvoidmain(Stringargs)System.out.println

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论