您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 2016032401_包的定义及使用
第(1)页共(8)页1、课程名称:包的定义及使用2、知识点2.1、上次课程的主要知识点1、Object类:·是所有类的父类,所有的类默认情况下都要继承此类,所以在整个Java里面除了Object类之外一切都是继承关系;·Object类可以接收所有数据类型,包括基本数据类型、引用数据类型;·Object类中的两个方法:publicStringtoString()、publicbooleanequals(Objectobj)。2、匿名内部类:程序的结构实在是太混乱了。·减少程序源文件中类的定义;·必须基于抽象类和接口才可以完成;3、基本数据类型包装类:·分类:|-对象型的包装类(直接是Object子类):Boolean、Character;|-数值型的包装类(直接是Number子类):Integer、Double、Short、Byte、Long、Float。|-Number类的方法(6个):intValue()、doubleValue()、shortValue()、byteValue()、longValue()、floatValue();·从JDK1.5开始支持了自动装箱与拆箱操作,正因为此特性,所以可以使用Object接收基本数据类型;·String与基本数据类型的转换:|-字符串转换为基本数据类型:Integer.parseInt()、Double.parseDouble()、Boolean.parseBoolean();|-基本数据类型变为字符串:String.valueOf(数据类型变量)。第(2)页共(8)页2.2、本次预计讲解的知识点1、包的主要作用以及定义;2、包的导入操作;3、系统常见的开发包;4、jar程序命令。3、具体内容(★★★★★)3.1、包的定义在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文件名称,但是在实际的开发之中又不可能出现不重名的情况,所以为了解决这样的冲突矛盾问题,在项目里面往往会引用包的概念,而所谓的包存储时就是一个文件夹,也就是说在不同的目录中可以存放有相同的文件。如果要想在java中定义包,直接使用package关键字即可。范例:定义包packagecn.mldn.demo;//包名称publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println(HelloWorld!);}}一旦程序中声明了包,那么就必须将生成的*.class文件保存在包里面,这个包并不是手工创建的,在Java里面考虑到了用户开发所需要的种种情况,所以专门提供有打包编译的操作;范例:打包编译javac-d.Hello.java在以上的编译命令中有两个参数:·“-d”:生成目录,默认情况下是根据package定义的内容生成;·“.”:生成程序的保存路径,如果设置为“.”表示当前目录下保存。此时如果程序有包了,那么在解释程序的时候必须加上包名称,也就是说此时的Hello类要执行:javacn.mldn.demo.Hello第(3)页共(8)页所有的Java项目开发过程之中,程序类必须要有包的定义才可以使用,没有包的类不存在。而类的完整名称“包.类”。3.2、包的导入利用程序包可以将一个很多的*.class类归类保存起来,但是这样一来就有可能出现包与包之间进行类的互相调用问题,所以此时就可以利用import语句来解决。范例:定义一个cn.mldn.util.Message的类packagecn.mldn.util;classMessage{publicStringgetInfo(){return}}范例:定义一个cn.mldn.test.TestMessage类packagecn.mldn.test;importcn.mldn.util.Message;//导入其他包的类publicclassTestMessage{publicstaticvoidmain(Stringargs[]){Messagemsg=newMessage();System.out.println(msg.getInfo());}}现在的程序肯定是需要进行编译,但是从理论上来讲应该先编译Message.java,而后再编译TestMessage.java,于是按照此顺序编译;第(4)页共(8)页之所以造成此问题,是因为此时的Message类的定义中使用的是默认的访问控制权限,而这个权限的特点是指的同一包中的类可以互相访问,但是不能够被外包所访问,所以学习完包的定义之后对于代码也可以进行一些规范化要求:以后写的类都要求写在包中,而且包中的*.java文件里面只会有一个publicclass声明。总结:关于publicclass与class声明类的区别?•publicclass定义要求文件名称与类名称保持一致,而在*.java文件之中只允许有一个publicclass定义,如果该类要被不同的包所使用,则必须使用publicclass声明;•class定义的类文件名称可以与类名称不一致,但那是在编译之后每一个class声明的类都会生成一个*.class文件,此类只能够在一个包中使用。范例:修改Message类的定义packagecn.mldn.util;publicclassMessage{publicStringgetInfo(){return}}现在发现在多个程序编译的时候要考虑编译顺序,那么这实在是太麻烦了,所以为了方便编译,可以使用“*.java”进行自动顺序编译:javac-d.*.java;但是现在的代码出现了两个问题:·问题一:每次都是单独导入特定的类;importcn.mldn.util.Message;在进行导入的时候都需要写上完整的类名称,那么假设说现在在cn.mldn.util包中存在有500个类,并且本次项目需要导入20个类,难道要写20个import吗?这样就很麻烦了,所以可以使用通配符“*”完成。packagecn.mldn.test;importcn.mldn.util.*;//导入其他包的类publicclassTestMessage{publicstaticvoidmain(Stringargs[]){Messagemsg=newMessage();System.out.println(msg.getInfo());}}第(5)页共(8)页使用“import包.*”的情况并不会将一个包中所有的类都导入进来,包括所谓的类加载的时候实际上只会加载所需要的类,不需要的类不加载。·问题二:有可能在同一个程序中导入不同的包,但是这不同的包有相同的类。现在模拟环境:|-现在有类一:cn.mldn.util.Message;|-现在有类二:com.yootk.Message;packagecom.yootk;publicclassMessage{publicvoidshow(){System.out.println(早饭吃了吗?);}}随后编译第二个Message程序类:javac-d.Message.java范例:在TestMessage类中由于某种需要同时导入了两个包packagecn.mldn.test;importcn.mldn.util.*;//导入其他包的类importcom.yootk.*;publicclassTestMessage{publicstaticvoidmain(Stringargs[]){Messagemsg=newMessage();System.out.println(msg.getInfo());}}为了避免使用中的类冲突,那么就建议在操作类的时候直接写上类的完整名称。范例:使用完整名称避免错误packagecn.mldn.test;importcn.mldn.util.*;//导入其他包的类importcom.yootk.*;publicclassTestMessage{publicstaticvoidmain(Stringargs[]){cn.mldn.util.Messagemsg=newcn.mldn.util.Message();System.out.println(msg.getInfo());}}这种情况在开发之中一定会出现许多次,所以用的时候就写上完整名称。编写顺序:package、import、publicclass。第(6)页共(8)页3.3、系统常见包Java的开发类库非常的庞大,而开发包也非常的多,比较常见的几个包如下:·java.lang:像Object、String、Integer、Number都是这个包中定义的,从JDK1.1开始自动导入;·java.lang.reflect:反射开发包,直接与框架开发有关系;·java.util:Java的工具包;·java.util.regex:正则表达式的开发包;·java.text:国际化程序支持包;·java.io:数据流的开发包(Input、Output),前提:抽象类;·java.net:网络编程包;·java.sql:数据库的编程包;·java.awt、javax.swing:图形界面开发;|-Java在最初JDK1.0的时候只提供有java.awt的开发包,这个开发包可以实现图形界面的开发,但是最初的设计较为仓促,要大量的使用windows的系统函数;|-在JDK1.2(Java2)推出了轻量级的组件,有了swing开发组件;·java.applet.*:是在网页上嵌入的java程序,是Java发展的标记;3.4、jar命令当一个项目开发完成之后,虽然不同功能的类要保存在不同的包里面,但是这里面也会出现一个问题,你不可能将所有的*.class文件散着给用户。往往有可能是若干个*.class文件完成某一特定的功能组合,那么如果要更新也只会更新这几个文件,所以在实际的项目中为了方便管理,往往会利用jar文件负责处理。范例:现在有一个Message.java类packagecn.mldn.util;publicclassMessage{publicStringgetInfo(){return}}1、进行打包编译:javac-d.Message.java;2、将开发包打成my.jar文件:jar-cvfmy.jarcn;第(7)页共(8)页打成的my.jar文件可以通过rar压缩文件打开,而后在这个文件里面会存在有一个文件夹:META-INF/MANIFEST.MF。3、当程序打包完成之后肯定需要进行代码的执行,肯定要编写测试类;packagecn.mldn.test;publicclassTestMessage{publicstaticvoidmain(Stringargs[]){cn.mldn.util.Messagemsg=newcn.mldn.util.Message();System.out.println(msg.getInfo());}}实际上每一个jar文件都是一个独立的路径,所以要想让jar文件起作用,必须配置CLASSPATH,但是CLASSPATH中有一个“.”,所以如果要配置多个CLASSPATH使用“;”分割。SETCLASSPATH=.;E:\testjava\my.jar以上的配置只能够在当前命令行中使用,如果要想让其成为全局的配置,则需要修改环境属性;第(8)页共(8)页如果现在你只使用记事本开发程序,那么所有需要的第三方的*.jar文件都必须在此处配置。4、总结1、以后的程序都要写上package打包;2、import语句往往不需要编写,前提:使用开发工具;3、jar命令是最好用的,比开发工具里提供的好用。
本文标题:2016032401_包的定义及使用
链接地址:https://www.777doc.com/doc-2962938 .html