对象的行为成员方法.ppt

上传人:tia****nde 文档编号:12793185 上传时间:2020-05-24 格式:PPT 页数:66 大小:1.14MB
返回 下载 相关 举报
对象的行为成员方法.ppt_第1页
第1页 / 共66页
对象的行为成员方法.ppt_第2页
第2页 / 共66页
对象的行为成员方法.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
1,JAVA面向对象程序设计JAVAObject-OrientedProgramming,授课教师:文斌setcourse2012,2012Fall,HainanNormalUniversity,2,授课内容,01了解Java02面向对象的“对象”03对象的属性-变量详述04对象的行为-成员方法详述05生命周期及作用域06Java常用类与函数库07面向对象中的继承08深入多态09使用异常处理10基于swing的图形界面编程11可视化程序的事件处理12Java多线程,3,授课内容,01了解Java02面向对象的“对象”03对象的属性-变量详述04对象的行为-成员方法详述05生命周期及作用域06Java常用类与函数库07面向对象中的继承08深入多态09使用异常处理10基于swing的图形界面编程11可视化程序的事件处理12Java多线程,4,Chap04对象的行为-成员方法详述,进一步掌握方法的定义和使用掌握类的构造方法的概念和编写、使用掌握方法的重载掌握Getters与Setters方法的规范编写理解封装的含义,5,Java中的方法,Java中的方法类似C语言中的函数,是一个可以被多次调用的相对独立的代码块,或者说是用来完成一个特定的任务的一小段程序。我们已经见过的方法有:publicstaticvoidmain(Stringargs);voidsetDim(doublew,doubleh,doubled);doublegetArea();,6,方法定义的格式,方法定义的格式:修饰符返回值类型方法名称(参数列表)/方法体中的语句在前面是方法头,中间是方法体。在中的部分是可选项。根据需要可以不同,也可以没有。,7,自定义一个方法,publicstaticvoidmax(inta,intb)intm;if(ab)m=a;elsem=b;System.out.println(“max=”+m);,修饰符返回值类型方法名称(参数列表)/方法体中的语句,8,定义方法相关说明,public表示该方法是公开的,在别的类和方法里面都能“看到”这个方法。static表示只有在静态方法里面才能访问这个方法。void表示这个方法没有返回值。方法的参数列表说明在调用它时需要传入数据的个数、及每个的类型。,9,方法的调用,使用方法实现特定功能叫做方法的调用。publicclassApppublicstaticvoidmain(Strings)inta=5,b=10,m1,m2;max(a,b);max(b,7);,调用方法时只写方法名称和实际要处理的数据,如不需要传递数据则只写方法名称和小括号。,10,方法调用的相关说明,一般形式:方法名(实参)注意:不写类型,只写方法名称和实际参数(有时不写),括号不能省。与方法定义的形式相一致:参数的类型、参数的个数、参数的次序。无返回值的方法,其调用可作为单独语句。有返回值的方法,其调用可放在表达式中,或作为其他方法调用的参数。,11,方法的返回值,通过方法调用得到一个确定的值,就是方法的返回值。方法的返回值是通过方法中的return语句获得的。在return这个关键字后面是一个可以接受的值,它可以是一个简单的值,也可以是一个变量,还可以是一个表达式。在定义方法时return语句中数据的类型要和指定返回值的类型一致,或者可以自动转换成返回要求的类型。,12,publicstaticintmax(intx,inty)return(xy?x:y);publicstaticvoidmain(Stringargs)intnum=10,m;m=max(num,20);System.out.println(“最大值是”+m);,带返回值的方法,定义方法的返回值类型为整型,通过return语句将返回值返回到调用位置,13,方法的参数,方法的形式参数:“形参”通常是方法所处理的数据、影响方法功能的因素或者方法处理的结果。如无需传递数据则可以为空。,publicstaticintmax(intx,inty)return(xy?x:y);,publicstaticvoidwelcome()System.out.println(“*”);System.out.println(“欢迎使用本程序”);System.out.println(“*”);,14,方法的实际参数:调用一个方法时,方法名后面小括号中的参数称为“实际参数”。实参可以认为是真正参与实际操作被处理的内容。实参可以是常量、变量或表达式,但要求它们有确定的值。,方法的参数,inta=-3,b=5,c;c=max(4,a+b);,15,方法的参数,方法的参数可以是复杂类型的数据,如类的对象、数组等。数组作为方法的形式参数,要写清楚类型和中括号。数组作为方法的实参,只写数组名称。,doubleaver(doublearr)/求形参数组arr所有元素的平均值;doubleprice=12.5,36.9,8.7,3,4.5;doublea=aver(price);,16,方法的参数,基本类型数据作方法的参数,实参变量对形参变量的数据传递是“单向值传递”,即只由实参传给形参,而形参不能传回给实参。publicstaticvoidmain(Strings)inta=2,b=3;fun(a,b);staticvoidfun(intx,inty)x=10;y=15;,17,方法的参数,引用类型的参数(如数组、对象),实参代表的是数据的引用,即地址。实参将引用传递给形参,两边共用一个地址空间的数据。此时在方法内部对引用的数据作任何操作,结果将被保留。注意数组作函数的参数,形参的里什么都不写。调用时实参只写数组名称。,18,方法的参数,数组作方法的参数举例:importjava.util.*;classParamDemo02publicstaticvoidmain(Stringargs)intscore=newint10;Scannerreader=newScanner(System.in);for(inti=1;im)m=si;returnm;,19,方法的参数,对象作方法的参数举例:importjava.util.*;publicclassMyFirstAppstaticScannerreader=newScanner(System.in);publicstaticvoidmain(Stringargs)HairhisHair=newHair();System.out.println(调用方法前);hisHair.printInfo();change(hisHair);System.out.println(调用方法后);hisHair.printInfo();publicstaticvoidchange(Hairh)System.out.println(请输入新的颜色);h.setColor(reader.next();System.out.println(请输入新的发型);h.setStyle(reader.next();classHairStringcolor=黑色;Stringstyle=板寸;voidprintInfo()System.out.println(头发的颜色是+color+造型是+style);voidsetColor(Stringc)color=c;voidsetStyle(Strings)style=s;,20,类中方法的相关说明,在同一个类内部的方法:在类的内部,成员方法可以对该类的成员变量直接访问。classBoxintwidth,height,depth;voidsetDim(intw,inth,intd)width=w;height=h;depth=d;,21,类中方法的相关说明,在同一个类内部的方法:在类的内部,成员方法之间可以相互直接访问(调用)。classBoxintwidth,height,depth;voidsetDim(intw,inth,intd)width=w;height=h;depth=d;printInfo();voidprintInfo()System.out.println(“长:”+width+”宽:”+height+”高:”+depth);,22,类中方法的相关说明,在同一个类内部的方法:在类的内部,static修饰过的静态成员可相互访问,其他成员不能访问static修饰的成员。相关内容将在第五部分具体介绍。,23,类中方法的相关说明,在不同类之间的方法:在一个类的“外界”想要访问类内部的成员方法,需要使用该类创建对象。通过创建的实体(即对象)配合分量运算符“.”的使用,进行方法的调用。格式为:对象.方法名(实参),Boxb1=newBox();b1.setDim(3,4,5);,24,类中方法的相关说明,在不同类之间的方法:static修饰过的方法可以在该类的外部通过类名.方法名(实参)进行调用。如Math.sqrt(85);Static相关内容将在第五部分详细讲解,此处不再展开。,25,课后练习,1.编写Java应用程序,定义一个计算两个整数和的方法staticintadd(intop1,intop2)。在main方法中声明两个整型变量,分别赋值,调用add()方法得到它们的和,在屏幕上输出结果。,publicclassAddTestpublicstaticvoidmain(Stringargs)intnum1,num2;num1=10;num2=20;System.out.println(num1+num2+=+add(num1,num2);staticintadd(intop1,intop2)returnop1+op2;,27,2、编写程序,定义一个方法publicstaticvoidabs(inta),用来求绝对值并输出结果。在main方法中从命令行读入一个整数,调用这个结果求它的绝对值。,importjava.util.Scanner;publicclassDemopublicstaticvoidmain(Stringargs)Scannerreader=newScanner(System.in);System.out.println(请输入一个整数);intn=reader.nextInt();abs(n);publicstaticvoidabs(inta)if(a=0)System.out.println(绝对值是+a);elseSystem.out.println(绝对值是+(-a);,29,3.在上述题目的基础上,修改abs成为带返回值的方法,即publicstaticintabs(inta),实现相同的功能。,importjava.util.Scanner;publicclassDemopublicstaticvoidmain(Stringargs)Scannerreader=newreader(System.in);System.out.println(请输入一个整数);intn=reader.nextInt();System.out.println(绝对值是+abs(n);publicstaticintabs(inta)if(a=0)returna;elsereturn-a;,31,3.在上述题目的基础上,修改abs成为带返回值的方法,即publicstaticintabs(inta),实现相同的功能。,importjava.util.Scanner;publicclassDemopublicstaticvoidmain(Stringargs)Scannerreader=newreader(System.in);System.out.println(请输入一个整数);intn=reader.nextInt();System.out.println(绝对值是+abs(n);publicstaticintabs(inta)if(a=0)returna;elsereturn-a;,33,4.定义一个方法publicstaticvoiddraw(intn,charch),实现输出n个ch符号。在main方法中提示用户输入相应数据,调用draw方法输出图形。,importjava.util.Scanner;publicclassMultiplicationpublicstaticvoidmain(Stringargs)Scannerreader=newScanner(System.in);System.out.println(要显示哪个符号?);charc=reader.next().charAt(0);System.out.println(要显示多少个?);intnum=reader.nextInt();draw(num,c);publicstaticvoiddraw(intn,charch)for(inti=1;i=n;i+)System.out.print(ch);System.out.println();,35,5.求数值累加和的方法,publicclassApp4staticintsum(intn)ints=0;for(inti=1;i=n;i+)s+=i;returns;publicstaticvoidmain(Strings)System.out.println(“110的累加和是”+sum(10);,37,作业一,38,方法的重载,多个方法有相同的名字,不同的参数,便是方法的重载。调用方法时编译器会自动根据实参表找到最匹配的方法去执行。找不到、或找到多个,均产生错误。“貌似同一个方法,体现出不同功能”,方法的重载是面向对象程序设计多态的实现方式之一。,39,方法的重载,在一个类和它的子类中,可以定义同名的方法,叫方法重载,只要它们的参数列表各不相同,与返回类型无关。所谓参数列表各不相同是指:参数的个数不同;参数的类型不同;参数的顺序不同。,一个方法的重载也可以返回不同的数据类型,但常用的是返回相同的类型。,40,方法的重载举例,重载Volume类中计算体积的方法,classVolumepublicintgetVol(intl)returnl*l*l;publicintgetVol(intl,intw,inth)returnl*w*h;,方法名称相同而参数列表不同实现方法的重载,41,方法的重载举例,重载方法的调用。,classVolumepublicintgetVol(intl)returnl*l*l;publicintgetVol(intl,intw,inth)returnl*w*h;,Volumeb=newVolume();System.out.println(b.getVol(10);System.out.println(b.getVol(7,8,9);,重载方法调用时根据其参数类型、个数和顺序来区分。,1000504,42,方法的重载,注意:方法参数列表中参数名称的不同不能构成方法的重载。方法重载不正确的例子:voidfunc1(intn,intm)voidfunc1(intx,inty)voidfunc2(floatf,intn,charc)voidfunc2(floatm,intk,charx),43,构造方法,构造方法是一类特殊的方法,从功能上讲,它是用来对新创建的对象进行初始化的;从形式上来讲,它有以下特点:它与类同名它没有任何返回值除了上述两点外,在语法结构上与一般的方法相同,44,构造方法,Java要求程序中每个变量在使用前都要先初始化,包括新创建的对象。在我们使用new关键字来创建一个类的对象时,我们实际上是在调用这个类的一个构造方法对对象进行构造。如果Java在一个类里找不到自定义的构造方法,它就为这个类添写一个默认无参构造方法,该构造方法无任何执行语句,我们在程序代码中看不到它。之前我们编写的类,在创建对象时都是使用的默认构造方法。,45,构造方法,构造方法“努力”构建对象,并且对对象进行初始化,如果需要,可以自己编写构造方法,在里面放上我们自己的初始化代码。一旦我们在类中自己定义了构造方法,Java不再自动增加默认无参构造方法。如果需要,必须自己将无参形式的构造方法写出来。构造方法也可以重载。,46,构造方法的定义,重写Boxclass使它带有自己的构造方法。classBoxBox()width=10;height=10;depth=10;System.out.println(“Box的构造方法被调用了!”);doublevolume()returnwidth*height*depth;doublewidth;doubleheight;doubledepth;,这一句是为了让我们能看到构造方法被调用的事实,除此以外没有任何意义。实际上,构造方法里是不会有与输入/输出有关的代码的,47,构造方法的使用,实例化对象时自动调用构造方法。classBoxConstructorDemopublicstaticvoidmain(Strings)BoxmyBox=newBox();BoxhisBox=newBox();doublemyVol=myBox.volume();doublehisVol=hisBox.volume();System.out.println(“myVolis”+myVol);System.out.println(“hisVolis”+hisVol);,Box的构造方法被调用了!Box的构造方法被调用了!myVolis1000.0hisVolis1000.0,两次创建Box的对象,所以构造方法被调用了两次,因为值是在构造方法里设定的,所以得到相同的结果。,48,有参构造方法的定义,classBoxBox()width=10;height=10;depth=10;System.out.println(“Box的无参数构造方法被调用了!”);Box(doublew,doubleh,doubled)width=w;height=h;depth=d;System.out.println(“Box的有参数构造方法被调用了!”);doublevolume()returnwidth*height*depth;doublewidth;doubleheight;doubledepth;,49,有参构造方法的使用,classBoxConstructorDemo2publicstaticvoidmain(Strings)BoxmyBox=newBox();BoxhisBox=newBox(3,6,9);doublemyVol=myBox.volume();doublehisVol=hisBox.volume();System.out.println(“myVolis”+myVol);System.out.println(“hisVolis”+hisVol);,两次创建Box的对象,调用了不同的构造方法,Box的无参数构造方法被调用了!Box的有参数构造方法被调用了!myVolis1000.0hisVolis162.0,有参数的构造方法可以重新设定Box的长、宽、高值,50,学生类,包含学号、姓名、成绩,classStudentintnum;Stringname;doublescore;Student()/无参构造方法num=101;name=“小明”;score=85;/有参构造方法Student(intn,Stringna,doubles)num=n;name=na;score=s;,51,classStudentintnum;Stringname;doublescore;Student()num=101;name=“小明”;score=85;Student(intn,Stringna,doubles)num=n;name=na;score=s;voidshow()System.out.println(num+name+score);,publicclassTestStupublicstaticvoidmain(Strings)Studentstu1=newStudent();stu1.show();/通过对象调用类的方法实现对本对象的操作Studentstu2=newStudent(105,”小强”,76);stu2.show();,101小明85105小强76,52,构造方法的重载,classBoxintlength,width,height;Box()length=10;width=10;height=10;Box(intl,intw,inth)length=l;width=w;height=h;,Boxb1=newBox();Boxb2=newBox(7,8,9);,53,封装与Getters、Setters方法,面向对象编程的核心思想之一就是将数据和对数据的操作封装在一起。如定义类。封装对对象的使用者实现了数据的隐藏。实现封装的关键在于绝不能让类中的方法直接访问其他类的成员变量,但可以访问它自己的成员变量。封装使得程序仅通过对象的方法与对象数据进行交互,提高了重用性和可靠性。,54,封装与Getters、Setters方法,与数据进行交互的两种标准方法:Getters访问器方法:仅访问成员变量而不对其进行修改的方法。方法名通常为”get成员变量名”,如getName()、getScore()。Setters更改器方法:对成员变量做出修改的方法。方法名通常为”set成员变量名”,如setPassword()。,55,封装与Getters、Setters方法,使用相应方法访问成员变量的优点:在类的内部改变变量或方法实现,不会影响其他代码。如变量名称的变化。可以在方法内执行错误检查、提供安全操作步骤。而直接对变量进行操作将不会做这写处理。如数值有效性审核(成绩、工资、帐户余额),56,小结,方法的定义与调用;形参与实参之间的关系;无返回值的方法定义时类型为void,调用时自成独立语句;有返回值的方法定义时指名类型,通过return把值返回到方法调用位置,方法调用作为结果要进行应用;同名不同参数表的多个方法形成方法重载。构造方法的编写和使用,构造方法的重载。封装的关键、定义与成员变量相关的方法。,57,6.定义一个类Initial,类的内部重载initArr()方法,分别实现对整型数组、双精度型数组、字符串数组的初始化功能,数组作为方法的参数,方法体内提示用户为数组元素输入数据,然后显示所有元素。在main方法中创建三种类型的数组,创建Initial类的对象,分别调用initArr()方法进行初始化。,importjava.util.*;publicclassOverLoad2publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubScannerreader=newScanner(System.in);Initialinit=newInitial();inta=newint6;init.initArr(a);doubleb=newdouble5;init.initArr(b);Strings=newString3;init.initArr(s);,classInitialScannerreader=newScanner(System.in);voidinitArr(intarr)System.out.println(初始化整型数组);for(inti=0;iarr.length;i+)System.out.println(请输入第+(i+1)+个整数);arri=reader.nextInt();System.out.println(整型数组初始化完毕,所有元素为:);for(inti=0;iarr.length;i+)System.out.print(arri+);System.out.println(n-);,voidinitArr(doublearr)System.out.println(初始化双精度型数组);for(inti=0;iarr.length;i+)System.out.println(请输入第+(i+1)+个双精度数);arri=reader.nextDouble();System.out.println(双精度型数组初始化完毕,所有元素为:);for(inti=0;iarr.length;i+)System.out.print(arri+);System.out.println(n-);voidinitArr(Stringarr)System.out.println(初始化字符串型数组);for(inti=0;i=0.5)returnn+1;elsereturnn;,64,授课内容,01了解Java02面向对象的“对象”03对象的属性-变量详述04对象的行为-成员方法详述05生命周期及作用域06Java常用类与函数库07面向对象中的继承08深入多态09使用异常处理10基于swing的图形界面编程11可视化程序的事件处理12Java多线程,65,作业二,66,问题?,Email:setcourse2012,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!