版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目第3章Java语言面向对象基 UML基础知 UML简 UML 类 包 package语 import语 JAR包的创建与运 习题 实验三Java面向对象基 面向对象(ObjectOriented,OO)2060Simula-67面向(Object(Class在面向对象软件工程(ObjectOrientedSoftwareEngineering,OOSE)中,其软件开发过程中包括面向对象分析(Object-Orientedysis,OOA、面向对象设计(Object-OrientedDesign,OOD、面向对象实现/面向对象程序设计(Object-OrientedProgramming,OOP)和面向对象测试(Object-OrientedTest,OOT)等基本活动,这些活动是无缝耦合交叉套叠的。抽象 Java语言中,抽象()有两种含义:①若抽象为动词,则指上述的抽象思维过对象类实例方法应消息的方法。在Java中把方法称为成员方法,在C++中把方法称为成员函数。属性都有自己特有的属性值。在Java中把方属性为成员变量,在C++中把属性称为数据成员。可以向别的对象发送消息请求服务。消息通信模型如图3-1所示。 图3-1消息通信模量和成员方法的。消息的基本数据结构(规格说明)主要包括提供服务的对象标识、服接口外提供服务。对象的接口由向服务使用者公开的所有方法构成。服务使用者在获得服务时,其服务的实现细节对服务使用者是透明的。接口是实现系统之间解耦的有力,提高Java语言中接口的两种含义:①概念性接口:指系统对外提供的所有服务,在对象中表提供的所有服务,实现了服务与服务实现细节的分离。值得的是,Java中“interface”碑意义。有关接口定义与使用技术细节,请见本书第4.6节(接口。封装服务,如图3-2所示。 图3-2对象的封装与交 封装的实现:在面向对象编程语言中通过控制来实现封装,控制机制能控制类protected:具有类域、包域和跨类性,即对同一个类、同一包中的类或者跨包中的(default类公开可见。④private:不对外公开,只具有类域性,即只在同一类内部公开可见,访问级别最低。灵活运用类成员的四种级别可有效地控制对象的封装程度,有关控制的详细介绍,请参见本第4.2节(控制。继承(SubclassClassAB的直接父类,BCC继承了BA属性和方法。)强大、但复杂性比单继承高,要特别注意避免二义性。C++支持单继承和多继承;Java不支要的是,由于继承关系打破了类的封装,实际中,为了降低父子类之间的耦合度,和方法不能被子类继承。有关继承的详细介绍,请参见本第4.3节(继承。封装、继承和多态是面向对象的基本特征,而多态与封装、继承紧密相关。Java不支持模型是对现实世界中原型系统的一种抽象和歧义的描述,以反映事物的本质特征。系统功能。通常使用统模语言(UnifiedModelingLanguage,UML)提供的类图、对象·论伯博士UML19966UML0.9。199711术的标准建模语言。UML中的“UOO建模方法(Booch、OMT和视化UML建模和面向对象系统设计分析工具和CASE工具。本使用中UML图均使用MagicDrawUML11.0绘制。类图(Class,#、~和分别表示公有(public、保护
(a)类 3-3UML(rtctd类类(a)student对象(实例(b)Student3-4UML用例图(UseCase用例图用来从用户角度描述系统的功能,并各功能的操作者。用例图以可视化方式3-5所示,有学生、教师3-5可以管理学生、审定课程和排课顺序图(Sequence3-6所示是选课系统采用会话外观设计模式的排课顺序图,客户端通过网络,先发立了Course、TeacherClassroom对象,最后给Course对象指派了教师和分配了教室。
3-6Diagram)协作图用来描述对象间的协作关序图包含的信息相同,RationalRose工 图3-7选课系统的排课协作户状态图如图3-8所示。3-9 图3-8选课系统的用户状态 图3-9选课系统的用户活动包图(Package3-10所示的soft.ch03包中,有四个类(ClassMethodDemo、ClassVariableDemoInstanceMethodDemo、InstanceVariableDemo)和一个接口(nOunerae构件/组件图(ComponentDiagram)依赖关系。构件图既可在次显示粗粒3-11JavaEE企业级应用的
3-10图3-11JavaEE企业级应用的组件
3-12JavaEE泛化 特 泛 一2.依赖2.依赖3-箭头”表示,如图3-14所示。若类A类B的属性或方法,AB3-实现3-153-15关联则类A中包含有类B类型的属性。按照类之间(a(b 图3-16关联关整体与部分的生命周期可不一样,UML中用带
部 整 部 组 整强强 (a)聚合关 (b)组合关 图3- ②组合(Combination)关系:它是强关系,被的子系统不允许被拆卸和替换,整体与部分的生命周期相同,UML中用带“实线的实心菱形箭头”表示,如图3-17(b)所者有独立的生命周期;具有关系(特别是强关系)的两个对象,整体对象会制约它Java作为纯面向对象程序设计语言,Java程序中的数据与操作皆封装在若干类中,最简JavaJava类,所以说,JavaJava程序的重要特点。种重要的复合数据类型,是Java语言的基础。[[修饰符class类名[extends父类名implements接口名列表{]]} ]: :3-18①class(类Java编译器,其后的“<类名>”是一个新建类。类名命名要求首Javaextends可以Javaextends后只能跟一个JavaObject类的子类,它们都直接或间接的继承了Object类。表中的多个接口间用逗号“,Java4.6[[public][ |final]]①默认(default类:无控制符的类,称为默认类。默认类只能被同一个包中的类②public(公有类public修饰的类叫公有类,它能被其他所有类所使用,公有类①(抽象类):使用②final(最终类final修饰的类中最终类。最终类不能有子类,故其中的方法不性而不允许用户随意修改,如Java标准类库中的一些底层类。注意:由于final类不能有子类,而类必须被子类继承,两者互为,故不能其一般格式如图3-19所示: ////public|protected|privatestaticfinaltransientvolatile <数据类型><变量名列表>[,变量名=<初值>]; [修饰符]<类名><对象名>[=new<构造方法名>([实参表]) //[public|protected|private][static]native <返回值类型><方法名>([形式参数列表] [throws异常列表] [语句序列; }[static][语句序列}}3-19简单成员变量是指“<数据类型>Java基本数据类型的变量,其定义格式如图3-19protected(保护成员变量protected修饰的变量叫保护成员变量,它可被该类默认(default成员变量若成员变量无控制符,称为默认控制,则此成员static(静态成员变量static修饰的变量叫静态成员变量,它的特点是属于类区”中的一个公共单元中,只有一个副本,被该类的所有对象共享,任何对象都可以访员变量的可以使用类名,也可以使用对象。详细内容见3.5节(类变量与实例变量)值在程序的整个执行过程中不能被改变的。最终成员变量的说明格式是:[<修饰符>]final<类型变量名初值>;最终成员变量通常还被说明为static类型。使用符号常量可使程transient(瞬时成员变量)transient修饰的变量叫瞬时成员变量,它不能被串行化,对于需要的变量,可使用瞬时成员变量提高其安全性。类中成员变量在默认情况“实例名.3.5节。Java1)对该类体内中必须包含<类型>、<方法名>和一对圆括号,可省略的有[修饰符]、[参数表]throws及后和非控制修饰符(static、final、、native、synchronized。将在下面的(2”中包括基本数据类型和类型(类、接口和数组。若方法没有返回值,则用void关键字表示。要的是“构造方法”作为一种构建类的实例的特定用途的方法,其返回值为该类的方法异常列表:为了提高程序的健壮性和可性,Java采用了面向对象的异常处的详细介绍见第8章(异常处理机制。方法体是实现该方能的代码段,它是由一对花括号“{}”括起来的语句序列,其中法没有被实现。当且仅当方法的修饰符中有(抽象方法)native(本地方法)时,{}private(私有成员方法private修饰的方法叫私有成员方法,它只能被该类自static(静态成员方法/类方法static修饰的方法叫静态成员方法,它的特点是何对象都可以它。静态成员方法的可以使用类名,也可以使用对象。通常静态方法只能处理静态变量。详细内容见3.6节(类方法与实例方法) native(本地成员方法)native修饰的方法叫本地成员方法,它通常用来说明方法体是用其他语言(C、C++、汇编语言等)编写的特殊方法。本地成员方法只在类体线程共存的程序中的协调和同步。详细内容见9.4节(线程的同步。注意:1)static和不能同时修饰某一个成员方法,即:一个类(静态)方法不能的具体实例,也不依赖于它的子类,所以当前类必须为类方法提供实现。2)final和成员不能被子类方法覆盖(重写),而成员方法必须被子类方法重写并实现,两者互为,故不能用来同时修饰一个成员方法。3)private和不能同时修饰某一个成员结论:与static、与final、与private在语义互为,所以不能和类型(类、接口和数组。值得的是,Java的同一个类中可定义多个同名方法,型和类型(类、接口和数组。若方法没有返回值,则用void关键字表示。方法的返回值是通过return语句实现,其一般格式是:return<表达式>;用超过一条以上的returnreturn语句作为方法的最后一条语句。一种:“实例名.实例方法名([实参列表3.6节。(的实参值。Java中,复合类型变量实际上是,并采用动态联编。 又称为静态代码块,其的定义格式如图3-19所示。类代码块不存在于任何方法体中。Java【例3-1】验证类的定义(类修饰符、成员修饰符、成员变量、成员方法、类的实例化(new)、类的组合关系和成员方法调用。本实例,首先将“点”抽象(映射)Point类,它由私有成员变量x(横坐getY()改器(setX()、setY())等构成。类,它由成员变量centre(圆心,Point类类型、radius(半getCircleLong等成员方法组成,其中Circlecentre属性是Point类类型,二者具有组合关系。最后在E3_1DefineClass主类中先创建了Point类的一个实例p1 图3-20例3-1的类的状态(坐标、半径、面积和周长。例3-1的类图如图3-20所示,程序代码如下:程 3-1: publicclassE3_1DefineClass主类(必为公有类publicstaticvoidmain(Stringargs主方法Pointp1=newPoint();//实例化一个点p1p1.setX(8.0);//设置点p1的x,y坐标值p1.setY(9.0);//调用p1实例的实例方法setY()Circlec1=newCircle();//实例化一个圆c1c1.setCentre(p1);//以对象p1为实参,点p1作为圆c1的圆心c1.setRadius(1.0);//设置圆c1的半径值System.out.println("圆心(x,yc1.getCentre().getX()+c1.getCentre().getY()+先用圆c1的实例方法getCentre()取得圆心,再用圆心的getX()和getY()取得x,y坐标值System.out.println("圆的半径="+c1.getRadius());//调用实例方法System.out.println("圆的面积="+c1.getArea());System.out.println("圆的周长}}classPoint点类的定义(默认类privatedoublex点的x坐标(私有变量privatedoubley点的y坐标(私有变量publicdoublegetX(){returnx;}//x坐标的器(公有方法)publicvoidsetX(doublex){this.x=x;}//x坐标的修改器publicdoublegetY(){returny;}publicvoidsetY(doubley){this.y=y;}classCircle圆类的定义(默认类finalstaticdoublePI PI常量(最终类变量publicPointgetCentre(){returncentre;}//圆心器(公有方法publicvoidsetCentre(Pointcentre){this.centre=centre;}//圆心publicdoublegetRadius(){returnradius;publicvoidsetRadius(doubleradius){this.radius=radius;publicdoublegetArea计算圆的面积(公有方法}publicdoublegetCircleLongreturn2*Circle.PI*radius}圆心(x,y圆的半径圆的面积圆的周长3-213-2程程 3-2:packagepublicclassE3_2ParameterDemopublicstaticvoidmain(Stringargs[])E3_2ParameterDemoe3_2PD=newAa1new Bb1new Cc1;//接口C的c1,接口不能实例化,只能接口的变量c1=newD();//创建类D的实例并赋值给接口C的c1////赋值相容二:实参为形参的同类对象(实参对象b1是形参B类类型的同类对象)e3_2PD.m2(b1);//调用方法m2(),修改了对象实参b1的mvb属性值//////e3_2PD.m2((B)//e3_2.Acannotbecasttoa1=e3_2PD.m3();//调用实例e3_2PD的实例方法m3(),返回类A的对象并赋值给a1Dd1=e3_2PD.m4();//调用实例e3_2PD的实例方法m4(),返回类D的对象并赋值给+d1.arithmeticOperate((int)1.0,(int)1.0,c1=e3_2PD.m5();//调用实例e3_2PD的实例方法m5(),返回接口C的并赋值给+c1.arithmeticOperate(1+2,1+2,//此处的实参d1所属类D实现了接口C,属双向传+e3_2PD.m6(d1,10,10,}voidm1(Ainaina.mA1形参为Avoidm2(Binb形参为BSystem.out.println("类Bmvbinb.getMvb());}//Am3(){returnnewB();//Dm4(){returnnewD();若返回类型为接口,则返回的数据类型必须实现该接口,此处类D实现了接口CCm5(){returnnewD();}intm6(CincintinxintinyStringop形参inc为接口C}}classA类}classBextendsA类B继承类A,其中mA1()方法被类BprivateintpublicintgetMvb(){returnmvb;publicvoidsetMvb(intmvb){this.mvb=mvb;}interfaceC接口 intarithmeticOperate(intx,inty,String}classDimplementsC类D实现接口publicintarithmeticOperate(intx,inty,Stringop)intz0zif(op.equals("+"))z=x+y;elseif(op.equals("-"))z=x-y;elseif(op.equals("*"))z=x*y;elseif(op.equals("/"))z=x/y;return}}第一次调用e3_2PD.m2(b1):类B实例的成员变量mvb=0第二次调用e3_2PD.m2(b1):类Bmvb100d1.arithmeticOperate(10,10,+)=2c1.arithmeticOperate(1+2,1+2,*)=9e3_2PD.m6(d1,10,10,/)=1用new运算符创建对象的一般格式是:<类名对象名>=new<类的构造方法名参数列表程 3-3: publicstaticvoidmain(String[]args)Accountsaccount1=newAccounts();//实例化默认帐号account1.showAccounts();//查看帐号account1.setAccounts("1001","刘",10000);//设置帐号account1.showAccounts();//查看帐号Accountsaccount2=newAccounts("1002","",100000);account2.showAccounts();//查看帐号}}classAccounts{//定义帐号类privateStringaID;//帐号privateStringaName;//privatedoublesaving存款}publicAccounts(StringaID,StringaName,doublesaving)this.aID=aID;this.aName=aName;this.saving=saving;}publicvoidsetAccounts(StringaID,StringaName,doublesaving)this.aID=aID;this.aName=aName;this.saving=saving;}publicvoidshowAccountsSystem.out.println("帐号:"+aID+"\t:"+aName+"\t存款:"+}}存款::<类名对象名列表<对象名>=new<构造方法名>([实参列表]]) <类名><对象名>=new<构造方法名>([实参列表 3-22型对象的变量,其本身是一个基本类型的变量,此时对象变量还未具体的对象,显Students1,s1=news2=new ","","男","1971-12-11","02级计科1班的成员变量进行初始化,新建对象的赋值给s2。常将返回的这个值赋给类型相容的对象名,此对象实际上是对象(地址。因此,在Java中,使用已知类创建的对象实际上是对象。new运算符主要完成两项操作。①为对象分配空间,从严格意义上讲,它是为每个的不同对象所拥有的成员方法的代码都是一样的,所以为了节省空间,所有对象共程 3-3: publicclassCreateObjectDemo{//Employee类的三个成员为三个对象Employeee1;EmployeeEmployeee3=newEmployee("0003","",2500.00,"2007-04-e1=newSystem.out.println("给e1的成员赋值e1.getEIDt+"\t"+e1.getESalary()+"\t"+e2=newEmployee("0002","",3500.00,"2007-05-e1e2System.out.println("将e2赋值给e1后e1.getEIDt"+"\t"+e1.getESalary()+"\t"+}publicstaticvoidmain(String[]args)//new}}classEmployee{//自定义雇员类privateStringeID;//工号privateStringeName;//privatedoubleeSalary薪水StringeHireDaySystem.out.println("eIDteNameteSalaryt}this.eID=this.eName=this.eSalary=this.eHireDay=System.out.println("创建初始化雇员:eIDteNameteSalaryt}publicStringgetEID(){returneID;}publicvoidsetEID(Stringeid){eID=eid;}publicStringgetEName(){returneName;}publicvoidsetEName(Stringname){eName=name;publicdoublegetESalary(){returneSalary;publicvoidsetESalary(doublesalary){eSalary=salary;}0.0 3500.0 05- 3500.02007-05-20尔型变量默认值为false;型变量的默认值为null。Employeee3=newEmployee("0003","",2500.00,"2007-04-Employeee1=new实际上,对对象的操作是对对象成员的操作。对象成员使用点“.”运算符来实现表示,其一格式是:<对象名>.<成员名>其中,<成员名>包括成员方法名和成员变量名。要的是对象成员会受到控制符的限制而不直接,例如为了提高封装性,一般情况下成员变量被private修饰而不能使用“<对象名>.<成员名>”方式来,只能通过其对外公开的接口,如public类型的器和修改器来间接操作。()是用来改变已有的值。由于对象实际上是型的变量。将一个对象赋值给另一个对象时,在【例3-3】中,同类对象直接赋值如:e1=e2;赋值后e1与e2的是内存中的同3-3CreateObjectDemoe1,e2,e3Employee的对象引Employeee3=newEmployee("0003","",2500.00,"2007-04-程 3-4: publicstaticvoidmain(Stringargs//调用类方法getStudent(),创建并返回一个对象s1Students1=Student.getStudent();s1.setStudent(s1,"001","",98);//调用类方法getStudent(),创建并返回一个对象s2Students2=Student.getStudent();s1.setStudent(s2,"002","",88);}}classStudent{//类StudentprivateStringsNo;//学号privateStringsName;//privatedoublesScore//对象作为方法的形publicvoidsetStudent(Students,StringsNo,StringsName,doublesScore){s.sNo=sNo;s.sName=sName;s.sScore=sScore;}staticpublicStudentgetStudent类(静态)方法,其返回对象returnnew}publicvoidshowStudent(Students){//对象作为方法的形System.out.println("学号:"+s.sNo+"\t:"+s.sName+"\t成绩:"+} :成绩:98.0 :成绩对象可以作为方法的返回值,该方法是类类型。Java中,方法的类型可以是简单类型,方法main(Stringargs[])中,便使用了String类的对象数组args[]作方法参数。程 3-5: publicclassObjcetArrayDemopublicstaticvoidmain(String[]args)doublesum=ScorescorenewScore[5for(inti0iscore.lengthiscore[i]=newScore(i+1,(int)(Math.random()*10)+1,.round(Math.random()*100));score[i].showScore输出对象数组元素值score[i]=null;//及时清除对象,以便回收器回}}}classScoreprivateintsno;//学号privateintcno;//课程号privatedoublescore成绩publicScore(intsnointcnodoublescorethis.sno=o=this.score=}publicvoidshowScoreSystem.out.println("学号snot课程号cnot成绩}publicdoublegetScorereturnscore}学号:1课程号:7成绩:33.0学号:2课程号:8成绩:39.0学号:3课程号:4成绩学号:4课程号:10 学号:5课程号:6成绩:74.0Students1,3-23s1=newStudent(" ","");s2=3-23其中,s1是型变量,内容s2s1s1所指示浅
图3-24例3-1的类深 Java提供了一个Cloneable接口用来支持浅和深方式的对象克隆。若希望某行重写,其克隆的格式类似于:c2=(Circle)c1.clone(),要的是clone()返回的是Object实现Cloneable接口只是通知Java编译器该类对象可以被,而具体实现过程是由然后再显式地创建该类中子对象的拷贝。若所有对象都实现了Cloneable接口,只要简单地调用clone()方法就可以实现对象的完全。对于需要深的对象,建议其子类对象都实现Cloneable接口。Java提供了自动内存管理能力,可以自动释放掉不再被使用的对象。在JavaObjectprotectedvoidfinalize(Javafinalize()方法,在这个方对象的finalize()方法。若在程序终止这前回收器始终没有执行回收操作,则回收器将始终不会调用无用对象的finalize()方法。Java虚拟机的回收操作对程序完全是透明的,因此程序无法预料某个无用对象的finalize()方法何时被调用。此外,除非回收器认为程序需要额外的内存,否则它不会试所以不能保证无用对象的finalize()方法一定被调用。对象,它的内存可以被回收,如【3-5】中的“score[i]=null;”语句。Java语言不支持不属于任何类的全局变量,而使用类变量在一定程度上支持全局变量,Java虚拟机在首次加载某类时,能根据类名在为类变量在运行时数据区中的“方法区”【例3-6】同一类中,可在任何方法内直接类(静态)变量:不同类中,可通过某程 3-6: publicclassClassVariableDemopublicstaticvoidmain(String[]{ClassVariablecv1=newClassVariable();ClassVariablecv2=newSystem.out.println("cv1.add(100)="+cv1.add(100));System.out.println("cv2.subtract(10)="+cv2.subtract(10));System.out.println("cv1.ID="+cv1.ID);System.out.println("cv2.ID="+}}classClassVariablestaticintIDintadd(inti){returnID+=i;}//同一类中,实例方法可直接类变staticintsubtract(inti){returnID-=i;}//同一类中,类方法可直接类变}cv1.add(100)=cv2.subtract(10)=cv1.ID=cv2.ID=ClassVariable.ID=【例3-7】同一类中,实例方法可直接实例(非静态)变量,而类方法只能通过实例方能实例变量:在不同类中,只能通过实例来 程 3-7: publicstaticvoidmain(String[]args)InstanceVariableiv1=newInstanceVariable();//创建一个实例InstanceVariableiv2=newInstanceVariable();//创建一个实例System.out.println("iv1.add(100)="+iv1.add(100));System.out.println("iv2.subtract(iv2,100iv2.subtract(iv2100));//只能用:"实例.类变量"方式实例变量System.out.println("iv1.IDiv1.ID);System.out.println("iv2.ID//System.out.println("InstanceVariable.ID="+}}intIDintadd(inti){//同一类中,实例方法可直接实例变returnID+=}staticintsubtract(InstanceVariableiv,inti)//returnID-=returniv.ID-=}}iv1.add(100)=iv1.ID=iv2.ID=-1)类方法可以直接其所属类的类变量和类方法;2)类方法不能直接其所属类main()this关键字(this代表类的当前实例,由其调用的均为实例变量和实例【例3-8】同一类中,类方法可直接调用类方法和类变量,要通过实例才能调用实程 3-8: //publicstaticvoidmain(String[]ClassMethodcm1newClassMethod//ClassMethod.SetIDName(100,"");cm1.SetIDName(100,"");ClassMethodcm2newClassMethod实例化cm2cm2.SetIDName(108,"");}}staticintIDvoidSetIDName(intID,Stringthis.ID }staticvoidgetIDName(ClassMethod{System.out.print("ID="+//System.out.print("Name="+//System.out.print("Name="+);System.out.print("\nName="++"\n");}staticvoidprintIDName(ClassMethodim)//SetIDName(1000,"}}ID=Name=nullID=100Name=ID=108Name=注意:1)main()staticmain()方法定义为静态方法,可以使得Javamain()main()方法,而无须先创建这个类的【例3-9】同一类中,实例方法可直接实例变量与类变量、实例方法与类方法,而程 3-9: publicclassInstanceMethodDemopublicstaticvoidmain(String[]{InstanceMethodim1=newInstanceMethod();im1.SetIDName(100,"");//InstanceMethod.printIDName(im1);InstanceMethodim2=newInstanceMethod();im2.SetIDName(108,"");}}classstaticintID类变量Stringname;//实例voidSetIDName(intID,String{this.ID=ID;//类变=name;//实例变} staticvoidgetIDName(InstanceMethodim) System.out.print("ID="+//System.out.print("Name="+//System.out.print("Name="+);System.out.print("\nName="++"\n");}}}ID=Name=ID=108Name=包同程序间类的重用。Java语言为程序员提供了自行定义包的机制。名不能重名,不同包中的类名可以重名,解决了类和接口名问题。②控制类之间:包是一个域,对包中的类的有保护作用。例如,若类被public修饰,则该类不仅可供同一包中的类,也可以被其他包中的类。若类无修饰符,则该类同一包中的类。控制的详细介绍见4.2节(控制。③有助于划分和组织Java应用javax.xml等包,称为基础(标准)类库。每个包中包含了许多有用的类和接口。用户也可以Java的基础类库其实就是JDK安装 java.util、、java.sql等。包是JVM自动引入的包。•java.awt(WindowsToolkit,AWT)包中包含了用于构建GUI界面的类及绘图类。类及java.sql包:支持数据库操作,包含DriverManager(驱动程序管理)类和JDK标准类库中的类可以提高软件复用率、编程效率和软件质量。软件复用是提高Java中,类是创建对象的模板,对象是类的实例,对象复用体现为类的重用。Java源程序由五个基本部分构成:①一个包(package)说明语句(可选用的包。③若干接口(可选项。④一个public的类。在一个源文件中只能有一个public类。⑤若干个属于本包的(无public饰符)类(可选项。其一般形式如下:package包名; import所要导入的类库; interface接口名{…… publicclass类名{…… class类名{… 语句来创建包。package语句缺省时,则使用源程序文件所在文件夹名作为默认包。默认包 程序3-10: publicclassPackageDemopublicstaticvoidmain(Stringargs[])inta=5,b=Mathmath=newMath();//对同一包中的类Math实例化System.out.println("math.add("+a+","+b+")="+math.add(a,b));}}classMathpublicdoubleadd(doublex,doubley){returnx+y;}publicdoublesubtract(doublex,doubley){returnx-y;}publicdoublemultiply(doublex,doubley){returnx*y;}publicdoubledivide(doublex,doubley){returnx/y;}}math.add(5,5)=math.subtract(5,5)=math.multiply(5,5)=math.divide(5,5)=③编译方法:D:\JPT>javacdPackageDemo.javaJPT方法一 soft.ch03.PackageDemo方法二:D:\>java-classpath soft.ch03.PackageDemo(2)一个包中的多个类,如importjava.awt.*。更确切的说,它并不是java.awt中的所有类,而只定义为public的类,并且只被代码的类,所以这“*”号代替类名,在不能代替包名,如importjava.awt.*,只java.awt下的类,而不java.awt下的包;import只告诉编译器及解释器哪里可以找到类、变量、方法的定义,而并没有将如果要使用的类是属于java.lang包的,那么可以直接使用类名来指定的类,而不需要加上包名,因为包java.lang不用显示使用import,它是缺省引入的;如果要使用的类在其它包(java.lang除外)中,那么可以通过包名加上类名来引用该类,如java.awt.Font;(import程 3-11: publicclassPackageDemopublicstaticvoidmain(Stringargs[])inta=5,b=Mathmath=newMath();//对不同包中的public类Math实例化System.out.println("math.add("+a+","+b+")="+math.add(a,b));}} publicdoubleadd(doublex,doubley){returnx+y;}publicdoublesubtract(doublex,doubley){returnx-y;}publicdoublemultiply(doublex,doubley){returnx*y;}publicdoubledivide(doublex,doubley){returnx/y;}}math.add(5,5)=math.subtract(5,5)=math.multiply(5,5)=math.divide(5,5)= d:\jptjavacdMyFirst.java←┘//“.编译结果是:d:\jpt\com\comsoft\ch03\MyFirst.class//设其中只定义了一个类 d:\jpt> 运行方法二:若当前为非主时,则要用classpath指明类的主,并使d:\>javaclasspath “jar.exe(压缩成一个JAR文件(JAR包,实现发布整个程序或类库。3-11】的soft.ch03PackageDemoMath为例说明JAR包的创建和运行方法。①在被打包的类所处的文件夹“E:\JPT\JBuilder2007\CH03\bin”中,编写文件 E:\JPT\JBuilder2007\CH03\bin>jarcfmpackagedemo.jarMANIFEST.MF-C.com表示文件的名字。(2)“-C.com”表示当前(E:\JPT\JBuilder2007\CH03\bin,此处用“.”表示)下所有以“com”打头的文件,要特别的是“-C”中的“”不能“”,此处“com”表示所有以“comDOS命令中,包名间的隶属符号“.”用“/”或“\”替换,如“soft.ch03”可用“com\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论