Java语言程序设计基础教程课件(第3章).ppt

Java语言程序设计基础教程课件(第3章).ppt

ID:59417064

大小:149.50 KB

页数:56页

时间:2020-09-19

上传者:U-5097
Java语言程序设计基础教程课件(第3章).ppt_第1页
Java语言程序设计基础教程课件(第3章).ppt_第2页
Java语言程序设计基础教程课件(第3章).ppt_第3页
Java语言程序设计基础教程课件(第3章).ppt_第4页
Java语言程序设计基础教程课件(第3章).ppt_第5页
资源描述:

《Java语言程序设计基础教程课件(第3章).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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中的一种重要的复合数据类型。它封装了一类对象的属性和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。基本格式为:class{}类声明类体 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运算符调用,当用类创建对象时,使用构造方法。 classPoint{intx,y;Point(){System.out.println("默认构造方法");}Point(intx,inty){this.x=x;this.y=y;System.out.print("带参数构造方法");}publicstaticvoidmain(String[]args){Pointp=newPoint(3,5);}}【例3-4】Point(intx,inty){this();….} 3.3对象定义类的最终目的是要使用这些类。类是创建对象的模板,类实例化可生成对象,对象通过消息传递来进行交互。对象的生成:创建一个对象包括对象的声明、实例化和初始化三个步骤。一般格式为:类名对象名=new类名([参数]); 3.3.1对象的生成1.声明:类名对象名声明并不为对象分配内存空间,而只是为对象名分配一个引用空间;它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址。 2.实例化运算符new为对象分配内存空间,它调用对象的构造方法,返回引用。一个类的不同对象分别占据不同的内存空间。3.生成根据参数不同调用相应的构造方法,进行初始化。注意:如果类中没有构造方法,系统会自动调用默认的构造方法(默认的构造方法是无参数的)如果类里面定义了一个或多个构造方法,那么Java不提供默认的构造方法 classStudent{floatheight,weight;Stringhead,ear,hand,foot,mouth;voidspeak(Strings){System.out.println(s);}}classA{publicstaticvoidmain(Stringargs[]){StudentZhangSan;//声明对象ZhangSan=newStudent();}}P68【例3-5】 3.3.2对象的使用引用运算符“.”:可以实现对变量的访问和方法的调用。一般格式为:对象引用.变量或对象引用.方法名([参数])p.x=10;tx=newPoint().x;变量和方法可以通过设定访问权限来限制其它对象对它的访问。 3.3.3对象的引用和实体如果一个类创建的两个对象具有相同的引用,那么就具有完全相同的实体。A.equals(B)A==B没有实体的对象称为空对象,空对象不能用来调用成员变量和成员方法。假如程序中使用了空对象,在运行时会出现运行时异常:NullPointerException。 classPoint{intx,y;Point(inta,intb){x=a;y=b;}}publicclassep3_7{publicstaticvoidmain(Stringargs[]){Pointp1,p2;//声明对象p1和p2p1=newPoint(10,10);p2=newPoint(23,35);System.out.println(p1==p2);p1=p2;System.out.println(p1==p2);}}P70【例3-7】 3.3.5对象的清除Java“垃圾收集”机制周期地检测某个实体是否已不再被任何对象所拥有。当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放实体占有的内存。System.gc(); publicclassThisConstructorCall{publicThisConstructorCall(Strings){System.out.println("s="+s);}publicThisConstructorCall(inti){this("i="+i);}publicstaticvoidmain(Stringargs[]){newThisConstructorCall("Stringcall");newThisConstructorCall(47);}}【例3-11】 3.6final关键字final关键字可以修饰类、类的成员变量和成员方法。用final修饰成员变量,说明该成员变量是最终变量,即为常量。程序中可访问,不能够修改finalstaticdoublePI;用final修饰成员方法,则该方法不能再被子类所重写,即该方法为最终方法。final修饰类,则类不能被继承,该类被称为最终类。 classep3_12_a{staticfinaldoublepi=3.1415926;//声明静态常量publicfinalvoidf(){//声明最终方法System.out.println("pi="+pi);}}classep3_12_bextendsep3_12_a{privateintnum=100;publicvoidf(){//出错,不可覆盖父类的最终方法System.out.println("num="+num);}}classep3_12{publicstaticvoidmain(Stringargs[]){ep3_12_bOne=newep3_12_b();One.f();}}P76【例3-12】 3.7Java类中的访问限定词Java语言中有四种不同的限定词,提供了四种不同的访问权限,限定词主要用来修饰成员变量或方法或类。PublicProtectedPrivatedefault 1.private用private修饰的成员变量和方法称为私有变量和私有方法,类中限定为private的成员,只能被这个类本身访问。如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。对于私有成员变量和方法,只有在本类中创建该类的对象时,这个对象才可以访问自己的私有成员变量和类中的私有方法,如下例所示: classep3_13{privateintmoney;ep3_13(){money=2000;}privateintgetMoney(){returnmoney;}publicstaticvoidmain(Stringargs[]){ep3_13exa=newep3_13();exa.money=3000;intm=exa.getMoney();System.out.println("money="+m);}}【例3-13】 2.default类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。非本包内的类不能访问。3.protected类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。4.public共有变量和共有方法,类中限定为public的成员,可以被所有的类访问。在任何一个类中用构造方法创建了一个对象后,这个对象都可以访问自己的public变量和方法。 类的访问限定词public:公共类,可在另一个类中创建公共类的对象default:友好类,可在同包的类中创建友好类不能用protected和private修饰类 3.8包包是将一些相关类聚集在一起的一个组织结构,是Java语言中有效管理类的一中机制。当一个大型程序交由数个不同的程序人员开发时,为类定义相同的名字是很有可能的,Java程序开发中为了避免这种情况,提供了一个包的概念(package)。同一个包内的类名不允许重复,不同包内可以有相同名称的类。 3.8.1包语句通过package语句指明该源文件定义的类所在的包,作为Java源文件的第一条语句格式:packagepackageName;包名可以是一个合法的标识符,建议小写,也可以是若干个标识符加“.”分割而成,如:packagesun.com.cn;//包结构和目录结构对应如果源文件中省略了package语句,那么源文件定义的类被默认为是无名包的一部分 packagechapter3;publicclassep3_14{publicvoidgetPrimnumber(intn){intsum=0,i,j;for(i=1;i<=n;i++){for(j=2;j<=i/2;j++){if(i%j==0)break;}if(j>i/2)System.out.print(""+i);}}publicstaticvoidmain(Stringargs[]){ep3_14p=newep3_14();p.getPrimnumber(20);}}【例3-14】 如何编译?Javac-d.类名.javaJava包名.类名在当前文件夹创建目录 3.8.2import语句import语句可以引入已有的Java提供的类可以有多个import语句必须写在package语句和源文件的类定义之间如:importjava.util.Date;importjava.awt.*; importjava.applet.Applet;importjava.awt.*;publicclassep3_15extendsApplet{Buttonredbutton;publicvoidinit(){redbutton=newButton("我是一个红色的按钮");redbutton.setBackground(Color.red);redbutton.setForeground(Color.white);add(redbutton);}}【例3-14】 3.9随堂练习定义一个圆类,包含构造方法,求圆面积(包含一个类方法)、设置/读取半径方法。注意:成员变量和方法的访问性 3.2.8值得注意的问题对成员变量的操作只能放在类方法中进行。在定义类成员变量时候可以同时赋初值。比如:classA{inta=12;}不可以这样做:classA{inta=12;a=12;//这么赋值是非法的}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭