您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Java 2实用教程课件(第3版第4章)
第4章类、对象和接口•4.1编程语言的几个发展阶段•4.2类•4.3对象•4.4static关键字•4.5this关键字•4.6包•4.7访问权限•4.8类的继承•4.9对象的上转型对象•4.10多态性•4.11abstract类和abstract方法•4.12super关键字•4.13接口•4.14内部类•4.15匿名类•4.16异常类•4.17Class类•4.18基本类型的类包装•4.19反编译和文档生成器•4.20jar文件4.1编程语言的几个发展阶段•机器语言(如汇编语言)•过程语言•面向对象编程-主要体现下列三个特性:1.封装性2.继承3.多态•Java语言是面向对象语言,它的源程序是由若干个类组成,源文件是扩展名为.java的文本文件4.2类•类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。对象•EverythingisObject:万事万物皆对象。•面向对象的编程(OOP)思想力图使对计算机语言中对事物的的描述与现实世界中该事物的本来面目尽可能的一致。•Class/Object:类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。作为对象蓝本的类•类(Class)是用来描述一个对象(Object):–类描述了每个对象应包括的数据–类描述了每个对象的行为特征类的定义•类包括两方面的内容:–属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)–方法:对对象的属性进行的操作称为对象的方法(也称为行为/操作)1.类声明classPeople{…}“classPeople”叫做类声明;“People”是类名。习惯上类名的第一个字母大写,但这不是必须的。2.类体•写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“{”,“}”以及它们之间的内容称做类体,大括号之间的内容称做类体的内容。•类体的内容由两部分构:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。class梯形{float上底,下底,高,laderArea;//变量定义部分float计算面积()//方法定义{laderArea=(上底+下底)*高/2.0f;returnladerArea;}void修改高(floath)//方法定义{高=h;}}3.成员变量和局部变量•变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。•成员变量和局部变量的类型可任意。惯例:名字如使用拉丁字母,首写字母小写,如由多个单词构成,从第二个单词的其他单词的首写字母使用大写。•成员变量在整个类内都有效,局部变量只在定义它的方法内有效。classSun{intdistance;intfind(){inta=12;distance=a;returndistance;}voidg(){inty;Y=a;}}•成员变量又分为实例成员变量(简称实例变量)和类变量(也称静态变量).如果成员变量的类型前面加上关键字static,这样的成员变量称做是类变量或静态变量。classDog{floatx;staticinty;}•如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效.classTom{intx=98,y;voidf(){intx=3;y=x;}}•如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字this。class三角形{floatsideA,sideB,sideC,lengthSum;voidsetSide(floatsideA,floatsideB,floatsideC){this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;}}•this.sideA,this.sideB,this.sideC就分别表示成员变量sideA,sideB,sideC4.方法•我们已经知道一个类的类体由两部分组成:变量的定义和方法的定义。方法的定义包括两部分:方法声明和方法体。•方法声明floatarea(){}惯例:名字如使用拉丁字母,首写字母小写,如由多个单词构成,从第二个单词的其他单词的首写字母使用大写。•方法体•方法声明之后的一对大括号“{”“}”以及之间的内容称为方法的方法体。内容包括局部变量的定义和合法的Java语句。•方法参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。如果局部变量的定义是在一个复合语句中,那么该局部变量的有效范围是该复合语句,即仅在该复合语句中有效,如果局部变量的定义是在一个循环语句中,那么该局部变量的有效范围是该循环语句,即仅在该循环语句中有效.•写一个方法和C语言中写一个函数类似,只不过在这里称做方法intgetPrimeNumberSum(intn){intsum=0;for(inti=1;i=n;i++){intj;for(j=2;ji;j++){if(i%j==0)break;}if(j=i){sum=sum+i;}}returnsum;}5.方法重载•方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。classArea{floatgetArea(floatr){return3.14f*r*r;}doublegetArea(floatx,inty){returnx*y;}floatgetArea(intx,floaty){returnx*y;}doublegetArea(floatx,floaty,floatz){return(x*x+y*y+z*z)*2.0;}}6.构造方法•构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载。class梯形{float上底,下底,高;梯形(){上底=60;下底=100;高=20;}梯形(floatx,inty,floath){上底=x;下底=y;高=h;}}7.类方法和实例方法•类中的方法也可分为实例方法和类方法.•方法声明时,方法类型前面不加关键字static的是实例方法、加关键字static的是类方法。•构造方法是特殊的方法,不能用static修饰构造方法。classA{inta;floatmax(floatx,floaty){…}staticfloatjerry(){…}}8.值得注意的问题•对成员变量的操作只能放在方法中。•实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量操作。•一个类中的方法可以相互调用,实例方法可以调用该类中的其他方法;类中的类方法只能调用该类的类方法,不能调用实例方法。classA{inta;staticintb;voidf(intx,inty){a=x;b=y;}staticvoidg(intz){b=23;a=z;}}classA{floata;voidsetA(floatx,floaty){a=get(x,y);}staticfloatget(floatx,floaty){floatc=max(x,y);returnc;}staticfloatmax(floatx,floaty){returnxy?x:y;}}4.3对象类是创建对象的模板。当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。1.创建对象•创建一个对象包括对象的声明和为对象分配内存两个步骤。(1).对象的声明。一般格式为:类的名字对象名字;如:PeoplezhangPing;(2)为声明的对象分配内存使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的,你一定还记得构造方法的名字必须和类名相同这一规定)。如:zhangPing=newPeople();(3)对象的内存模型使用例子1来说明对象的内存模型classXiyoujiRenwu{floatheight,weight;Stringhead,ear,hand,foot,mouth;voidspeak(Strings){System.out.println(s);}}classA{publicstaticvoidmain(Stringargs[]){XiyoujiRenwuzhubajie;//声明对象zhubajie=newXiyoujiRenwu();//为对象分配内存,//使用new运算符和默认的构造方法}}声明对象时的内存模型•当用XiyoujiRenwu类声明一个变量,即对象zhubajie时,如例子1中的对象zhubajie:XiyoujiRenwuzhubajie;内存模型如左图所示对象分配内存后的内存模型•当系统见到:zhubajie=newXiyoujiRenwu();时,就会做两件事:①为各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间,然后执行构造方法中的语句。②new运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将返回一个引用给对象变量zhubajie。例:4.22.使用对象•对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。•通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。•当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。•例:4.3例:4.43.对象的引用和实体•当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。•一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。•没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产生行为。•Pointp1=newPoint(12,16);•Pointp2=newPoint(6,18);•p1=p2;4.参数传值•当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。例如,如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的拷贝。方法如果改变参数的值,不会影响向参数“传值”的变量的值。基本数据类型参数的传值•对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。引用类型参数的传值•Java的引用型数据包括对象、数组和接口。当参数是引用类型时,“传值”传递的是变量的引用而不是变量所引用的实体。•如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。但是,改变参数的引用不会影响向其传值的变量的引用。•例4.5例4.64.4static关键字•用static修饰的成员变量称为类变量•用static修饰的方法称为类方法1.实例变量和类变量的区别•一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有的对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。classTakecare{staticintx;inty;}classA{TakecareA1=newTakecare();TakecareA2=newTakecare();}A1.x=18;•类变量不仅可以通过某个对象访问,也可以通过类名访问。•实例变量可以通过对象访问,不能通过类名访问。例4.72.实例方法和类方法的区别•实例
本文标题:Java 2实用教程课件(第3版第4章)
链接地址:https://www.777doc.com/doc-3157657 .html