您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Java语言程序设计基础教程课件(第3章)
Java程序设计基础教程第三章类和对象第3章类和对象面向对象技术基础类的概念、定义与使用对象的生成、使用、清除static关键字this关键字final关键字Java类中的限定词包和import语句3.1面向对象技术基础3.1.1面向对象的基本概念面向对象是一种新兴的程序设计方法。其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。1.对象的基本概念对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。客观世界是由对象和对象之间的联系组成主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。2.类的基本概念把众多的事物归纳、分类是人类在认识客观世界时经常采用的思维方法。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。3.消息消息就是向对象发出的服务请求消息包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。3.1.2面向对象的基本特征1.封装性:就是把对象的属性和服务结合成一个独立的单位,并尽可能隐蔽对象的内部细节含义:把对象的全部属性和全部服务结合成一个独立单位。信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口与外部发生联系。好处:有效的避免了外部错误对它的“交叉感染”,使软件错误能够局部化,大大减少查错和排错的难度。2.继承性特殊类的对象拥有某个一般类的部分属性与服务,称作特殊类对一般类的继承。一个类若是多个一般类的特殊类,则它能从多个一般类中继承属性与服务,称为多继承。在Java语言中,称一般类为父类(superclass,超类),特殊类为子类(subclass)。Java只支持单继承3.多态性对象的多态性是指在父类中定义的属性或服务被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在父类及其各个子类中具有不同的语义。3.1.3面向对象程序设计方法面向对象程序设计方法可分为面向对象的分析(OOA,ObjectOrientedAnalysis)面向对象的设计(OOD,ObjectOrientedDesign)面向对象的实现(OOI,ObjectOrientedImplementation)3.2类的定义与使用类是组成Java程序的基本要素,是Java中的一种重要的复合数据类型。它封装了一类对象的属性和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。基本格式为:classclassname{memberfielddeclarationsmembermethoddeclarations}类声明类体3.2.2类声明Java中类声明的语法如下:[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]{……}访问修饰符类名继承于父类实现的接口列表给类命名时,最好遵守下列习惯。1)类名应该是名词,大小写可混用,但首字母应大写,如Time、People等。2)类名最好见名识义类体Java中类体定义的语法如下:classclassName{typemumberVariable;returnTypemumbermethod([paramList]){statements}}成员变量的定义成员方法的定义3.2.4成员变量和局部变量publicclassCircle{publicintr;publicdoublegetArea(){doublearea=3.14*r*r;returnarea;}publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();c1.r=5;System.out.println(c1.getArea());}}类体中方法体之外定义——成员变量方法体内或参数列表中定义——局部变量两者的相同之处类型上:可以是任意一种数据类型命名上:都要符合标示符命名规范两者的不同之处初始化方式不同生命周期不同使用范围不同对外部的可见性不同publicclassCircle{publicintr;publicdoublegetArea(){doublearea=3.14*r*r;returnarea;}publicstaticvoidmain(){Circlec1=newCircle();c1.r=5;System.out.println(c1.getArea());}}publicclassCircle{publicdoublegetArea(){doublearea=3.14*r*r;returnarea;}publicintr;publicstaticvoidmain(Stringa[]){Circlec1=newCircle();c1.r=5;System.out.println(c1.getArea());}}publicclassCircle{publicintr;publicdoublegetArea(intr){doublearea=3.14*r*r;returnarea;}publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();System.out.println(c1.getArea(5));}}this.变量名——成员变量this——表示当前对象的应用如:this.成员变量this.成员方法当局部变量和成员变量同名时,成员变量被隐藏,如何引用被隐藏的成员变量呢?publicclassCircle{privateintr;publicvoidsetR(intr){}publicdoublegetArea(){doublearea=returnarea;}publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();System.out.println();}}3.14*r*r;this.r=r;程序填空:求半径为5的圆的面积c1.setR(5);c1.getArea()思考题:什么时候把变量定义为局部变量?什么时候定义为成员变量?若没有第三个空的语句,输出的结果是多少?成员变量的声明方式如下:[public|protected|private][static][final]typevariableName;注意:变量可大小写混用,但首字符应小写。限制用下划线和美元符号($),因为这个字符对内部类有特殊的含义访问控制符静态变量常量2.成员变量的分类成员变量又分为实例成员变量(简称实例变量)和类变量(也称静态变量),如果成员变量的类型前面加上关键字static,这样的成员变量称为类变量或静态变量。publicclassCircle{privateintr;publicstaticdoublePI=3.14;……}实例变量和类变量的区别不同对象的实例变量将被分配不同的内存空间,而类变量,对所有对象的这个类变量都分配给相同的内存空间,改变其中一个对象的这个类变量会影响其它对象读取的值,即同类对象共享类变量。当程序执行时,类代码被加载时,就会给类变量分配空间,而实例变量要在创建实例后才分配空间类变量通过类名可直接引用,实例变量要通过创建实例后的实例名来引用,不能通过类名直接引用Circlecl1=newCircle(3);System.out.println(cl1.r);类成员变量实例成员变量3.2.5成员方法方法的定义包括两部分内容一般格式为:[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[throwsexceptionList]{statements}方法声明方法体方法名应该是动词,首字母应小写1.方法声明方法声明包括方法名、返回类型和形式参数。参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。2.方法体方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。方法声明部分有static则此方法为类方法(静态方法),无static的为实例方法实例方法和类方法的区别当类加载到内存时,实例方法不会被分配入口地址,当创建对象后,类中的实例方法才分配入口地址。所以其只能通过对象名引用,且方法定义中,既可以使用实例变量也可以使用类变量。类方法在类加载到内存时,就分配了相应的入口地址。所以其既可以通过类名直接调用,也可以通过对象名调用。在在方法定义中,只能使用类变量,不能使用实例变量。Math.max(10,7);//通过类名直接调用Strings=newString(“Hello”);Intlen=s.length();//通过实例名调用3.2.6方法重载方法重载是指在一个类中以同一个名字定义多个方法,每个方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。方法的名字与所属类型以及参数的顺序构成了方法签名(signature),在类中每个方法的签名必须是不完全一样的,这样才能使编译器准确地判断你调用的是哪个方法。注意1:方法返回值的类型不能用来区分重载的方法注意2:参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。classMethodOverloading{voidreceive(inti){System.out.println(Receiveoneintdata);System.out.println(i=+i);}voidreceive(intx,inty){System.out.println(Receivetwointdatas);System.out.println(x=+x+y=+y);}}publicclassMethodOverloadingTest{publicstaticvoidmain(Stringargs[]){MethodOverloadingmo=newMethodOverloading();mo.receive(1);mo.receive(2,3);}}P65例3-3】方法的参数传递对于简单数据类型来说,Java实现的是值传递,对于复合数据类型(引用型)在值传递中传递的是引用地址,方法中对引用地址所指向的数据的操作可以改变数据的值。publicclassPerson{intage=20;char[]name={‘w',‘a',‘n‘,’g’};publicvoidchange(intage,charch[]){age=22;ch[0]=‘y';}publicstaticvoidmain(Stringargs[]){Personwang=newPerson();wang.change(wang.age,wang.name);System.out.print(wang.age+and);Sytem.out.print(wang.name);}}输出结果??方法的参数传递3.2.7构造方法构造方法是一个特殊的方法具有和类名相同的名称,而且不返回任何数据类型;Java中的每个类都有构造方法,用来初始化该类的一个对象;构造方法也可以重载;构造方法只能由new运算符调用,当用类创建对象时,使用构造方法。cla
本文标题:Java语言程序设计基础教程课件(第3章)
链接地址:https://www.777doc.com/doc-3685726 .html