Java应用程序在运行时,需要将使用到的类的字节加载到内存,因此,对字节码文件所在的位置有一定要求,一般分为以下四种情形:
1. 使用当前应用程序所在目录中没有包名的类:
对于当前应用程序所在目录中没有包名的类,可直接加载使用。
2. 使用Java运行环境中类库中的类:
Java运行环境所提供的类库中的类都是有包名的,应用程序必须使用import语句引入相应包中的类。
3. 使用应用程序当前目录的子孙目录中的类:
应用程序当前目录下的子孙目录可以作为用户自定义包的包名,具有该包名的类必须存放在这些子孙目录中,应用程序就可以使用import语句引入用户自定义包中的类。
4. 使用Java运行环境扩展中的类:
我们可以使用jar.exe命令把一些类的字节码文件压缩成一个jar文件,然后将这个jar文件存放到Java运行环境的扩展中,即将该jar文件存放在JDK安装目录的jrelibext文件夹中,这样,Java应用程序就可以使用这个jar文件中的类来创建对象。
有包名的类
假设下列TestOne和TestTwo类的包名为moon.star。
TestOne.java
packagemoon.star;//包语句publicclassTestOne{publicvoidfTestOne(){System.out.println(IamamethodInTestOneclass);}}
TestTwo.java
packagemoon.star;//包语句publicclassTestTwo{publicvoidfTestTwo(){System.out.println(IamamethodInTestTwoclass);}}
将TestOne.java和TestTwo.java保存到C:1000moonstar目录中,然后进入该目录分别编译这两个源文件。
现在,我们就将C:1000moonstar目录中的TestOne.class和TestTwo.class压缩成一个jar文件:Jerry.jar。
首先,我们编写一个清单文件:hello.mf(Manifestfiles)。
hello.mf
Manifest-Version:1.0Class:moon.star.TestOnemoon.star.TestTwoCreated-By:1.6
将hello.mf保存到C:1000目录中,为了使用jar命令来生成一个jar的文件,首先需要进入到C:1000目录,即进入包名的上一层目录,然后使用jar命令来生成一个名字为Jerry.jar的文件。
C:1000>jarcfmJerry.jarhello.mfmoonstarTestOne.classmoonstarTestTwo.class
如果C:1000moonstar只有TestOne.class和TestTwo.class两个字节码文件,也可使用jar命令。
C:1000>jarcfmJerry.jarhello.mfmoonstar*.class
最后,将jar命令在C:1000目录中生成的Jerry.jar文件复制到Java运行环境的扩展中,即将该Jerry.jar文件存放在JDK安装目录的jrelibext文件夹中。
无包名的类
如果TestOne和TestTwo类没有包名,只需将TestOne.java和TestTwo.java保存到C:1000中,编译得到字节码文件。编写一个清单文件,然后保存到C:1000中,进入到C:1000目录,使用jar命令。
C:1000>jarcfmJerry.jarhello.mfTestOne.classTestTwo.class
如果C:1000只有TestOne.class和TestTwo.class两个字节码文件,也可使用jar命令。
C:1000>jarcfmJerry.jarhello.mf*.class
最后,将jar命令在C:1000目录中生成的Jerry.jar文件复制到JDK安装目录的jrelibext文件夹中,应用程序就可以直接使用Jerry.jar文件中的TestOne.class和TestTwo.class。