Java jar包,为方便使用第三方代码,也为了方便我们写的代码给其他人使用,各种程序语言大多有打包的概念,打包的一般不是源代码,而是编译后的代码。打包将多个编译后的文件打包为一个文件,方便其他程序调用。
在Java中,编译后的一个或多个包的Java class文件可以打包为一个文件,Java中打包命令为jar,打包后的文件扩展名为.jar
,一般称之为jar包。
可以使用如下方式打包,首先到编译后的java class文件根目录,然后运行如下命令:
jar -cvf <包名>.jar <最上层包名>
比如,对前面介绍的类打包,如果Hello.class位于E:\bin\coolcou\com\Hello.class
,则可以到目录 E:\bin
下,然后运行:
jar -cvf hello.jar coolcou
hello.jar就是jar包,jar包其实就是一个压缩文件,可以使用解压缩工具打开。
Java类库、第三方类库都是以jar包形式提供的。如何使用jar包呢?将其加入类路径(classpath)中即可。类路径是什么呢?
程序的编译与链接
从Java源代码到运行的程序,有编译和链接两个步骤。编译是将源代码文件变成扩展名是.class
的一种字节码,这个工作一般是由javac命令完成的。链接是在运行时动态执行的,.class文件不能直接运行,运行的是Java虚拟机,虚拟机听起来比较抽象,执行的就是Java命令,这个命令解析.class文件,转换为机器能识别的二进制代码,然后运行。所谓链接就是根据引用到的类加载相应的字节码并执行。
Java编译和运行时,都需要以参数指定一个classpath,即类路径。类路径可以有多个,对于直接的class文件,路径是class文件的根目录;对于jar包,路径是jar包的完整名称(包括路径和jar包名)。在Windows系统中,多个路径用分号“;”
分隔;在其他系统中,以冒号“:”
分隔。
在Java源代码编译时,Java编译器会确定引用的每个类的完全限定名,确定的方式是根据import语句和classpath。如果导入的是完全限定类名,则可以直接比较并确定。如果是模糊导入(import带.*
),则根据classpath找对应父包,再在父包下寻找是否有对应的类。如果多个模糊导入的包下都有同样的类名,则Java会提示编译错误,此时应该明确指定导入哪个类。
Java运行时,会根据类的完全限定名寻找并加载类,寻找的方式就是在类路径中寻找,如果是class文件的根目录,则直接查看是否有对应的子目录及文件,如果是jar文件,则首先在内存中解压文件,然后再查看是否有对应的类。
总结来说,import是编译时概念,用于确定完全限定名,在运行时,只根据完全限定名寻找并加载类,编译和运行时都依赖类路径,类路径中的jar文件会被解压缩用于寻找和加载类。
酷客教程相关文章:
评论前必须登录!
注册