第05讲-面向对象程序设计(4)内部类-包的使用-程序发布

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2011年浙江工业大学计算机学院Java程序设计视频教程Java程序设计视频教程本讲主题:面向对象程序设计(4)本讲主讲教师:黄洪本讲内容包的概念和应用Jar文件与应用程序的发布内部类包装类23包包(package)是类的逻辑组织形式。Java提供的用于程序开发的类和接口(API)就放在各种包中。也可以自己创建包。4JavaAPI的包java常用的包有:java.lang语言包,唯一一个不要把它明确引入程序的包java.util实用工具包java.awt,javax.swing图形用户界面工具包java.text文本包java.io输入输出包java.appletApplet应用程序包java.net网络编程包5包与文件夹在实际项目开发中,每个类都应该定义在某个包中。这样一方面易于管理,另一方面可以有效地防止命名冲突。包名与文件夹具有对应关系一般在创建项目时为了便于管理,源文件和字节码文件是分开保存在不同的目录中的。例如假定项目的文件夹为myproject,则源文件保存在myproject下的src文件夹中,字节码文件保存在myproject下的classes文件夹中6包与文件夹如果一个项目myproject中的类是这样定义的:packagecom.misxp;publicclassPackageExercise…那么这个类所在的文件PackageExercise.java应该保存在myproject/src/com/misxp下;它的编译好的字节码文件应该保存在myproject/classes/com/misxp下。可以看出:包名中的com、misxp分别对应着同名的文件夹。而且misxp是com的子文件夹。7包与文件夹使用JDK如何实现以上要求,简单的办法是:进入命令行状态让src成为当前文件夹执行命令javac–d../classescom/misxp/*.java现在的集成开发工具可以方便地帮我们处理包的问题。8引用包中的类或接口import语句如果要使用Java类中的包,要在源程序中用import语句导入。import包名1[.包名2……].类名|接口名|*;“*”表示包中所有的类。如:importjava.applet.Applet;//导入Java.applet包中的Applet类importjava.awt.*//导入Java.awt包中所有的类Java包的搜索路径用环境变量classpath设置对Java包的搜索路径。Java包一般在JDK安装目录下的lib文件夹中,如:d:\jdk1.6\lib9自定义包如果在程序中没有声明包,类就放在默认的包中,这个包是没有名字的。默认包适用于小的程序,如果程序比较大,就需要创建自己的包。声明包的格式package包名;声明一个包的语句要写在源程序文件的第一行。编译后字节码文件的存放位置在运行目录下创建一个和包同名的文件夹(字母大小写也一样),将编译产生的.class文件放到此文件夹中。10包和访问权限的关系一个包中只有访问权限为public的类才能被其它包引用(创建此类的对象),其它具有默认访问权限的类只能在同一包中使用。在不同包中类成员的访问权限。public类的public成员可以被其它包的代码访问。它的protected成员可以被由它派生的其它包中的子类访问。默认访问权限的类成员,不能被其它包的代码访问11例:创建包firstpackage和类Date,同时在PersonDemo.java创建类Person1.packagefirstPackage;2.importjava.util.Calendar;3.publicclassDate{4.privateintyear,month,day;5.publicDate(inty,intm,intd){6.year=y;7.month=m;8.day=d;9.}10.publicDate(){}11.publicintthisyear(){12.returnCalendar.getInstance().get(Calendar.YEAR);13.}14.}121.importfirstPackage.Date;2.classPerson{3.Stringname;4.intage;5.publicPerson(Stringna,intag){6.name=na;7.age=ag;8.}9.publicPerson(){}10.publicintbirthYear(intthisYear){11.returnthisYear-age+1;12.}13.}14.publicclassPersonDemo{15.publicstaticvoidmain(Stringargs[]){16.Personps=newPerson(Tom,21);17.Datenow=newDate();18.inty=now.thisyear();19.System.out.println(ps.name+wasbornin+ps.birthYear(y));20.}21.}13程序的发布把开发好的程序交给用户就叫发布。总不能让用户也像我们前面讲的一样去执行吧。而且,一个较大的软件肯定有很多的字节码文件,把一大堆字节码文件交给用户也不方便。我们希望:把许多字节码文件打包成一个文件用户双击这个文件就可以运行程序,就像我们运行windows中的应用程序一样。14Jar与JAR文件JDK中有一个实用工具jar.exe可以完成打包工作。打包好的文件扩展名一般为jar,所以叫JAR文件。由于JAR文件中有很多类,如果想让该JAR文件可以直接运行,我们就必须告诉java虚拟机那一个类是包含main方法的主类。这是通过编辑一个.mf的文件来实现的。15.mf文件my.mf文件应该包含以下一行内容:Main-Class:主类的完整名称如:Main-Class:PersonDemo这一行后面必须回车换行,否则可能出错。另外,冒号后面必须空一格。16创建可执行的JAR文件使用工具jar.exe可以创建可执行的JAR文件。进入命令行状态让classes文件夹成为当前文件夹执行以下命令:Jarcmfmy.mfTest.jar*.classFirstPackage就可以得到Test.jar打包文件。Test可以自己取。双击test.jar或用命令java–jarTest.jar就可以运行程序。17内部类在一个类的内部定义的类,叫做内部类。内部类可以访问其外部类的所有成员。内部类可以在类中、方法中、语句块中,甚至语句中定义。18内部类内部类的类名只用于定义它的类或语句块之内,在外部引用它时必须给出带有外部类名的完整名称,并且内部类的名字不允许与外部类的名字相同。内部类可以访问外部类的static或实例成员变量内部类可以在成员方法中定义,该成员方法的局部变量及参数必须是final的才能被该内部类使用内部类可以是抽象类或接口,若是接口,则可以由其它内部类实现19内部类(续)内部类可以被声明为static(普通类则不可以),这样的内部类变成顶层类(最外面的类),相当于把它放到外面,不再是嵌套的内部类。由于只有顶层类可以声明static成员,如果内部类需要定义static成员,则该内部类必须声明为static。20例:内部类访问外包类成员1.publicclassOuter{2.privateintsize;3./**定义内部类Inner*/4.publicclassInner{5.//将外包类的成员变量size递增6.publicvoiddoStuff(){7.size++;8.}9.}10.Inneri=newInner();//成员变量i指向Inner类的对象11.publicvoidincreaseSize(){12.i.doStuff();//调用内部类Inner的方法13.}14.publicstaticvoidmain(String[]a){15.Outero=newOuter();16.17.for(inti=0;i4;i++){18.o.increaseSize();19.System.out.println(Thevalueofsize:+o.size);20.}21.}22.}21内部类中加上修饰符访问同名外部包类成员1.publicclassOuter{2.privateintsize;3./**定义内部类Inner*/4.publicclassInner{5.privateintsize;6.publicvoiddoStuff(intsize){7.size++;//存取局部变量8.this.size++;//存取内部类的成员变量9.Outer.this.size++;//存取其外包类Outer的成员变量10.System.out.println(sizeinInner.doStuff():+size);11.System.out.println(sizeoftheInnerclass:+this.size);12.System.out.println(sizeoftheOuterclass:+Outer.this.size);13.}14.}15.Inneri=newInner();//成员变量i指向Inner类的对象16.17.publicvoidincreaseSize(ints){18.i.doStuff(s);//调用内部类Inner的方法19.}20.publicstaticvoidmain(String[]a){21.Outero=newOuter();22.o.increaseSize(10);23.}24.}22在类的语句块(方法)中定义内部类1.classOuter{2.privateintsize=5;3./**方法makeInner(),返回一内部类对象*/4.publicObjectmakeInner(finalintfinalLocalVar){5.intLocalVar=6;6.classInner{7.publicStringtoString(){8.return(#Innersize=+size+9.finalLocalVar=+finalLocalVar+);10.}11.}12.returnnewInner();//方法makeInner()返回一内部类对象13.}14.publicstaticvoidmain(String[]args){15.Outerouter=newOuter();16.Objectobj=outer.makeInner(40);17.System.out.println(Theobjectis+obj.toString());18.}19.}23在其它类中访问某个类的内部类1.classOuter{2.privateintsize;3.classInner{4.voiddoStuff(){5.size++;6.System.out.println(ThesizevalueoftheOuterclass:+size);7.}8.}9.}10.publicclassTestInner{11.publicstaticvoidmain(String[]a){12.Outerout=newOuter();13.Outer.Innerin=out.newInner();14.in.doStuff();15.}16.}24包装类包装类将基本数据类型包装成引用数据类型。每个包装类对象都封装了基本类型的一个值。基本数据类型对应的包装类booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble25包装类包装类中包含了很多有用的方法和常量。创建相应的包装类对象(T

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功