




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5章类和对方法的约定:方法的基调和语例classCircle{doublex;doublegetArea(){returnclassSquare{doublex;doublegetArea(){return} 例:仅包含数据成员的classMyDateType{intx,y,z;}classMyDateType1int}本章主要内容5.1一个简单的5.2 控5.4创建对5.5构造与初始5.6方5.75.8方法的名复用5.9main方5.10native方一个简单的classBodypubliclongidNum;publicStringnameFor;publicBodyorbits;publicstaticlong} Bodymercury;该语句仅说明 ,并未指向任何具体对象classTestpublicstaticvoidmain(String[]args)Bodymercury;}}
类的成分:域、方法、内嵌类和内嵌接类修饰符:public 、final、strictfp一个类不能既 ,同时又是final域分为静态和非静域说明之前可有不同的修饰符,用于控制该域的特定 当说明一个域时,可指定一个相应类型的值对该域进初始化器。初始化器不一定是常量,也可以是另一个已过classXintinty=method();intz=y;
intmethod(){returnpublicstaticvoidmain(String[]args){Xr=newX();System.out.println(r.x+","+r.y+",}}是方法调用,那么该方法要么不检测性异常,要么所有构造器都说明的检测性异常。例classMyExceptionextendsExceptionclassBint
都说 的检测性异intmethod()throwsMyExc on{thrownewB()throwsMyExceptionB(intx)throwsB()throwsMyExceptionB(intx)throwsMyExceptionBr=new}}如果域未加初始化,就根据其类型赋予如果使用对决定了静态域的类。如果使用对决定了静态域的类。说明的类classSuperClass{staticintx=1;}classSubClassextendsSuperClass{staticintpublicstaticvoidmain(String[]args){SuperClassr=newSubClass();}}final变量的值在被初始化之后就不能再改变该域是否表示不可变性质在对象创建时,该域的值是否总是明确,由一个类的所有域和方法都可被类本身代 类 控制修饰符:public,package(缺省public类可以被所有其他 package类可以被同一包中所有其他 (对象)可见的成员类的可见性只是其成员可见性的必要条 控制修饰符:public,protected,package(缺省),privateprivate成员只能在本类中 package成员可在同一包内所有类中 public成员可以在 该类的类中 文件一:.\package1\Point.javapackagepublicclassPoint{publicdoublex=1,y=2;doublez=3;publicstaticint}文件二Demo.javaimportpackage1.*;classDemo{publicstaticvoidmain(String[]args){Pointobj=newPoint();}}例:private域和方法不能在类classXprivateintx1=1;intx2=2;voidmethodX(){}}classTestPrivatepublicstaticvoidmain(String[]args){Xobj=newX();}}例:private成员在子类中被继承,但不能classMyClass{privateintx=1;intgetX(){returnx;}voidsetX(inty){x=y;}}classMySubClassextendsMyClass{intz=2;publicstaticvoidmain(String[]args){MySubClasso=newMySubClass();}}象级别。这意味着一个类的所有代码都能该类classAprivateintx=1;voidmethod()Ar=newA();}}
而package和private成员 实现,对外是隐藏的创建对利用new类名()创建对象的细 例Bodysun=newBody();sun.idNum=Body.nextID++;For="Sol";sun.orbits=null;Bodyearth=newBody();earth.idNum=Body.nextID++;For="Earth";earth.orbits=sun;构造与初始给新创建对象的域赋初值,由构造器完成构造器与类同名,可以有多个参数,也可不是方法,没有返回类 例:改进的BodyclassBodypubliclongpublicStringname="<unnamed>";publicBodyorbits=null;privatestaticlongnextID=Body()idNum=}}Bodysun=newBody();="Sol";Bodyearth=newBody();="Earth";earth.orbits=sun;为改进的Body类提供带参数构Body(StringbodyName,BodyorbitsAround){name=bodyName;orbits=orbitsAround;}利用带参数构造器创建对Bodysun=newBody("Sol",null);Bodyearth=newBody("Earth",sun);还可再提供一个只带一个形参的构造Body(StringbodyName){this(bodyName,}没有形参的构造器称为无参构造器 缺省构造器与其相应的类具有相同 控制拷贝构造器—当前对象类型作为形参,P86例Body(BodyidNum=other.idNum;name=;orbits=other.orbits;}
newBody(sun);将会得到什 一个综合classMyExceptionextendsExceptionclassA{intA(intx)A(Ar)A(Strings)throwsMyException{thrownewMyException();}}classBpublicstaticvoidmain(String[]args){Aa=newA();try{Aa=newA("Exception");}catch(MyExceptione){}Aa=newA(1);Ab=newA(a);}}如果有多个块,就按照出现次序执行只 所有构造器都说 的检测性异常例,用等价的初始化块来取代无参构造classpubliclongpublicStringname="<unnamed>";publicBodyorbits=null;privatestaticlongnextID={idNum=publicBody(StringbodyName,BodyorbitsAround){name=bodyName;orbits=}}static,只能类中的静态成员,且不能检测classPrimesstaticint[]knownPrimes=newint[4];static{knownPrimes[0]=for(inti=1;i<knownPrimes.length;i++)knownPrimes[i]=nextPrimes();}//declarationof}}另classA{staticintx;static{}publicstaticvoidmain(String[]args){Ar=null;}}方方法包含了可以理解和管理对象状态的方法说明包括两部分:方法首部和方法方法首部包括一组修饰符、方法返回类型、基调(signature)、throws说明的异常。方法基调包括方法所有方法都必须有返回类型和基调,但修饰符和throws子句可选。方法体是花括号之间的一组语句方法的修饰符:,static,final,synchronized,native,strictfp。抽象方法不能修饰为static、final、synchronized、静态方法只能类中的静态变量和静态方法。静态方法中没有this,因为没有作的当前对象。方法调用:reference.method(arguments)形参具有一个指定的类型,既可以是一个基本类型,也可以是一个类型。方法调用时必须提供与形参方法还有一个返回类型,可以是基本类型,也可以是类型。如果方法不返回任何值,则说明返回void。toStringtoString方法:如果一个对象具有一个public、不带参例publicStringtoString()Stringdesc=idNum+"("+name+")";if(orbits!=null)desc+="orbits"+orbits.toString();returndesc;}System.out.println("BodySystem.out.println("Bodysun);输出结果System.out.println("Bodyearth);输出结果–被调用方法的返回条件执行return语句到达方法的末尾未捕获的异方法可以用几种方式来返回多个结果返回一个对象 ,对象的域存放所要的结果把一个或几个对象 作为参数,对 结果返回一个包含结果的数例classPermissionspublicboolean}class ongnumber,publicPermissionspermissionsFor( who){Permissionsperm=newPermissions();perm.canDeposit=canDeposit(who);perm.canWithdraw=canWithdraw(who);perm.canClose=canClose(who);return}}一个综合classPoint{intx,y;Pointvalue(intx,inty){this.x=x;this.y=y;Pointo=newPoint();o.x=x+1;o.y=y+1;return}int[]value1(intx,inty){this.x=x;this.y=y;int[]o=newint[2];o[0]=x+1;o[1]=y+1;return}voidvalue(intx,inty,Pointo){this.x=x;this.y=y;o.x=x+2;o.y=y+2;}}classDemopublicstaticvoidmain(String[]args){Pointo1=newPoint().value(1,2);int[]o2=newPoint().value1(1,2);Pointo3=newPoint();new}}classPointintPointvalue(intx,inty){this.x=x;this.y=y;Pointo=newPoint();o.x=x+1;o.y=y+1;returno;}int[]value1(intx,inty){this.x=x;this.y=y;int[]o=newint[2];o[0]=x+1;o[1]=y+1;return
classDemopublicstaticvoidmain(String[]args){Pointo1=newPoint().value(1,2);int[]o2=newPoint().value1(1,2);Pointo3=newPoint();newPoint().value(1,2,o3);}}}voidvalue(intx,inty,Pointo){this.x=x;this.y=y;o.x=x+2;o.y=y+2;}}形参值:java方法的所有参数都是“以值调用classPassByValuepublicstaticvoidmain(String[]args){doubleone=1.0;System.out.println("before:one="+one);System.out.println("after:one="+one);}publicstaticvoidhalveIt(doublearg){arg/=2.0;System.out.println("halved:arg="+}}–如果形参是对象 的拷贝,而不是对象本身,例classPassRefpublicstaticvoidmain(String[]args)Bodysirius=newBody("Sirius",null);System.out.println("before:"+sirius);System.out.println("after:"+sirius);}{publicstaticvoidcommonName(BodybodyR="DogStar";bodyRef=null;}}–如果把方法的形参说明为final,方法内该形参的用方法来控为了强制对一个域的只能是只读的,把这个域修饰为private,并提供一个public方法,使类外代码能通过这个方法它的值;对数据规范的方法称为方法尽可能定义private域,而不定义public域例classBody ongidNum privateStringname=privateBodyorbits=null;privatestaticlongnextID=0;Body(){idNum=nextID++;}publiclonggetID(){returnidNum;}publicStringgetName(){returnname;}publicvoidsetName(StringnewName){name= publicBodygetOrbits(){returnorbits;}publicvoidsetOrbits(BodyorbitsAround){orbits=orbitsAround;}publicvoidcapture(Bodyvictim){victim.orbits=}一个综合classPoint{intx=1,y=2;voidmethodPoint(){Pointo=this;}}classDemostaticvoidmain(String[]args){newPoint().methodPoint();}}方法的名复两个方法可以有同样的名字,但各自有不同的形参数目或类型,因而基调也不同,这样的特性被称为方法的名复用(vra),即同一个名字表示多种含义。当程序员调用一个方法时,编译器比较实参和形参的publicbooleanorbitsAround(Bodyother){return(orbits==other); publicbooleanorbitsAround(longid)return(orbits!=null&&orbits.idNum==id);如如果两个方法基调相同,但返回类型不同,不能认为方法的基调并不包括返回类型或 异常,所以不构造器也能以方法同样的方式进行名复用如果两个或 的同名方法也具有相同数目的参数Ja使用一个“最佳选择”的算法从中选出正确的方法:以上规则也适用于基本数voidmoorge(Dessertd,Scones)voidmoorge(Cakec,Dessertd)voidmoorge(ChocolateCakecc,Sconemoorge(dessertRef,sconeRef);moorge(chocolateCakeRef,dessertRef);moorge(chocolateCakeRef,butteredSconeRef);moorge(cakeRef,sconeRef);编译时不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修工程合同范本
- 给外地亲友写封信
- 三人合作项目合同书
- 房地产项目买卖合同书
- 电路理论习题(含参考答案)
- 文化产业园马戏表演合同合作协议书范本
- 全面升级:河南电子合同政务门户
- 度建筑废渣承包运输合同细则
- 合同法修订与工程招投标实践
- 战略合作保密合同协议
- 建设工程安全生产管理条例试题
- 2025年郑州卫生健康职业学院单招职业适应性测试题库带答案
- 2025年河南应用技术职业学院单招职业适应性测试题库必考题
- 2025年郑州卫生健康职业学院单招职业适应性测试题库必考题
- 2025年湖北省八市高三(3月)联考英语试卷(含答案详解)
- 2025年南阳科技职业学院单招职业倾向性测试题库带答案
- 15 青春之光 公开课一等奖创新教学设计
- 2025年中国特殊热电偶市场调查研究报告
- 2025年人教版中考英语总复习清单八年级上册Units7-8
- 2024年全国中学生数学奥林匹克竞赛内蒙古赛区初赛试卷(解析版)
- 第七届北京市大学生模拟法庭竞赛第二轮赛题A
评论
0/150
提交评论