您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > JAVA程序设计 第4章 使用类和对象编程.ppt.jsp
第4章使用类和对象编程计算机科学与工程学院本章学习目标掌握类和对象的基础知识掌握类和对象的创建与应用理解方法和成员变量的用途掌握方法的声明和调用学会使用构造方法编写简单的面向对象程序4.1创建类类和对象是面向对象的编程技术的核心概念。类是根据分析和处理问题的需要,对某一类现实事物的抽象;对象是实际存在的该类事物的每个个体。类是java程序的基本要素。类包括属性和方法。类定义对象的结构,对象是类的实例。编程时先定义类,再由类创建对象。4.1.1引例在第2章的引例中更好的体现面向对象的特点。即:设计一个求一元二次方程根的类,使用此类的对象就可求任何一个一元二次方程的根。classQue{doublea,b,c;Que(doublex,doubley,doublez){a=x;b=y;c=z;}voidmethod(){doubled,x1,x2;d=b*b-4*a*c;if(d0)System.out.println(此方程无解);elseif(d==0){x1=-b/(2*a);System.out.println(此方程有一解:+x1);}else{x1=(-b+Math.sqrt(d))/(2*a);x2=(-b-Math.sqrt(d))/(2*a);System.out.println(此方程有两解:+x1+,+x2);}}}classE_31{publicstaticvoidmain(Stringargs[]){Queq1,q2;q1=newQue(1,-4,4);q2=newQue(1,-5,6);q1.method();q2.method();}}classDesk{intlength,width,height;floatprice;floattiji(){….}}4.1.2类的定义[public]class类名{成员变量方法}类的动态属性用户自定义的,不能是java关键字,应是合法标识符。若由多个单词组成的话,每个单词的首字母应大写。类名最好体现类的功能和作用类的静态属性class梯形{float上底,下底,高,area;float计算面积(){area=(上底+下底)*高/2.0f;returnarea;}void设置梯形(floata,floatb,floatc){上底=a;下底=b;高=c;}}自己练习:定义一个类Point,用来描述平面直角坐标系中点的坐标,该类应该能描述点的横、纵坐标信息及一些相关的操作,包括获取点的横、纵坐标,修改点的坐标,显示点的当前位置。实际上,类声明的完整格式为:[修饰符]class类名[extends父类名][implements接口名]类的修饰符有三种:publicabstractfinal4.2成员变量与方法4.2.1成员变量的定义成员变量是在类的内部、方法的外部所定义的变量,此类的所有方法都可对其访问。成员变量定义的一般形式:[访问权限符][static][final]类型变量名其中:访问权限符包括publicprotectedprivate注意区分成员变量与方法变量classTriangle{intd1,d2,d3;floatarea(){intp;floats;….}}4.2.2成员变量的初始化成员变量定义后,如果没有赋值,则其初值为系统的默认值。如整型的默认值为0,实型的为0.0,布尔型的为false,字符型的为\u0000,引用类型为null。classA{intx=20;intgetx(){returnx;}}classE_3{publicstaticvoidmain(Stringargs[]){Aa1;a1=newA();//a1.x=30;System.out.println(a1.getx());}}classA{intx=20,y=20;voidprint(){System.out.println(x=+x+y=+y);}}classA{intx,y;x=20;y=20;voidprint(){System.out.println(x=+x+y=+y);}}正确错误使用成员变量应该注意的一个问题[访问控制符][存储类型]返回值类型方法名([参数表]){声明部分语句部分}例:staticintadd(intx,inty){intz;z=2*x+3*y;returnz;}注意:(1)方法只能在类中定义!(2)方法定义包括方法头和方法体两部分!(3)访问控制符可以是public,private,protected(4)存储类型可以定义是static(5)方法名必须是合法的java标识符注意:(6)参数表形式:参数类型参数名(7)有返回值的方法体中必须有return语句(8)方法不能嵌套定义。4.2.3方法的创建publicclassE4_1{publicintsum(intn){inti=1,s=0;for(;i50;i++)s+=i;returns;}booleanok(doublex){if(x=0&&x=100)returntrue;elsereturnfalse;}}3.2.4方法的调用调用方法就是执行此方法。形式如下:1、方法表达式方法名([实参列表])在表达式中出现此形式适用于有返回值的方法2、方法语句方法名([实参列表])以独立语句的方式出现此形式使用于无返回值的方法publicclassE4_2{staticbooleanok(inta,intb,intc){if(a+bc&&a+cb&&b+ca)returntrue;elsereturnfalse;}staticintadd(inta,intb){inti=1,s=0,t=1;for(i=1;i=a;i++)t*=i;s+=t;t=1;for(i=1;i=b;i++)t*=i;s+=t;returns;}publicstaticvoidmain(Strings[]){System.out.println(ok(4,5,9));System.out.println(ok(4,5,6));inta=4,b=3,c;c=add(a,b);System.out.println(c);}}publicclassE4_3{staticvoidprint(Strings,intt){System.out.println(s+t);}staticvoidarea(inta,intb){Stringss=它们的和是:;intt=a+b;print(ss,t);ss=它们的积是:;t=a*b;print(ss,t);}publicstaticvoidmain(Strings[]){inta,b;a=4;b=5;area(a,b);}}注意:静态方法只能对静态方法调用publicclassplim{privatebooleanok(intn){booleanflag=true;inti=2;for(;i=Math.sqrt(n);i++)if(n%i==0)flag=false;returnflag;}protectedbooleanokluan(intn){if(ok(n)&&ok(n+2))returntrue;elsereturnfalse;}}classEx4_4{publicstaticvoidmain(Strings[]){plima=newplim();for(inti=3;i100;i+=2)if(a.okluan(i))System.out.println(i+,+(i+2));}}例:打印出100以内的所有孪生素数。publicclassplim{staticvoidprint(inta[]){inti=0;for(;ia.length;i++)a[i]=a[i]*2;for(i=0;ia.length;i++)System.out.println(a[i]);}}classEx4_4{publicstaticvoidmain(Strings[]){plima=newplim();plimb=newplim();intc[]={1,2,3,4,5};a.print(c);b.print(c);}}4.2.5参数的传递在调用一个带有形式参数的方法时,必须为方法提供实际参数,这就是参数的传递。在Java中,参数传递是以传值的方式进行,即将实际参数的值传递给形式参数,而不是将实际参数的地址传递给形式参数。publicclassE4_2{staticvoidswap(intx,inty){intt;t=x;x=y;y=t;System.out.println(x=+x+,y=+y);}publicstaticvoidmain(Strings[]){inta=4,b=5;swap(a,b);System.out.println(a=+a+,b=+b);}}运行结果:x=5,y=4a=4,b=54.2.6方法的重载所谓方法的重载就是在类中创建了多个方法,它们具有相同的名称,但有不同的参数和不同的定义。方法的重载是对已有的同名方法的重新定义。调用方法时根据实参数确定调用哪个方法classCal{publicstaticintabs(intx){if(x0)x=-x+5;returnx;}publicstaticdoubleabs(doublex){if(x0)x=-x*2;returnx;}}classTuXing{float求面积(floatr){return3.14f*r*r;}float求面积(floata,floatb){returna*b/2.0f;}float求面积(floata,floatb,floatc){return(a+b)*c/2.0f;}publicstaticvoidmain(Stringargs[]){TuXingtx=newTuXing();System.out.println(tx.求面积(5.0f));System.out.println(tx.求面积(5.0f,4.0f));System.out.println(tx.求面积(5.0f,4.0f,3.0f));}}4.2.6递归调用importjavax.swing.JOptionPane;publicclassE4_3{staticlongfac(intn){if(n==1)return1;elsereturnn*fac(n-1);}publicstaticvoidmain(Stringargs[]){intn;Stringm;m=JOptionPane.showInputDialog(请输入一个整数);n=Integer.parseInt(m);System.out.println(fac(n));}}例:将一个十进制数转换为二进制数例:汉诺塔问题。例:将一个十进制整数转换为二进制数。publicclassE4_3{staticvoidexg(intn){if(n==1)System.out.print(1);else{exg(n/2);System.out.print(n%2);}}publicstaticvoidmain(Stringargs[]){intn;n=Integer.parseInt(args[0]);exg(n);}}例:汉诺塔问题。publicclassE4_3{staticvoidmove(chara,charb,intn){System.out.println(n+:+a+-+b);}staticvoidmoves(chara,charb,charc,intn){if(n==1)move(a,c,n);else{moves(a,c,b,n-1);move(a,c,n);moves(b,a,c,n-1);}}publicstaticvoidmain(Stringargs[]){moves('A','B','C',4);}}4.3对象3.3.1创建对象创建对象包括对象的声明和为对象分配内存。1、对象的声明类名对象名;2、为对象
本文标题:JAVA程序设计 第4章 使用类和对象编程.ppt.jsp
链接地址:https://www.777doc.com/doc-5239996 .html