Java应用程序在运行时,需要将使用到的类的字节加载到内存,因此,对字节码文件所在的位置有一定要求,一般分为以下四种情形:


1. 使用当前应用程序所在目录中没有包名的类:

对于当前应用程序所在目录中没有包名的类,可直接加载使用。


2. 使用Java运行环境中类库中的类:

Java运行环境所提供的类库中的类都是有包名的,应用程序必须使用import语句引入相应包中的类。


3. 使用应用程序当前目录的子孙目录中的类:

应用程序当前目录下的子孙目录可以作为用户自定义包的包名,具有该包名的类必须存放在这些子孙目录中,应用程序就可以使用import语句引入用户自定义包中的类。


4. 使用Java运行环境扩展中的类:

我们可以使用jar.exe命令把一些类的字节码文件压缩成一个jar文件,然后将这个jar文件存放到Java运行环境的扩展中,即将该jar文件存放在JDK安装目录的jre\lib\ext文件夹中,这样,Java应用程序就可以使用这个jar文件中的类来创建对象。


有包名的类

假设下列TestOne和TestTwo类的包名为moon.star。


TestOne.java

package moon.star; //包语句
public class TestOne {
    public void fTestOne() {
        System.out.println("I am a method In TestOne class");
    }
}


TestTwo.java

package moon.star; //包语句
public class TestTwo {
    public void fTestTwo () {
        System.out.println("I am a method In TestTwo class");
    }
}


将TestOne.java和TestTwo.java保存到C:1000\moon\star目录中,然后进入该目录分别编译这两个源文件。


现在,我们就将C:1000\moon\star目录中的TestOne.class和TestTwo.class压缩成一个jar文件:Jerry.jar。


首先,我们编写一个清单文件:hello.mf(Manifestfiles)。


hello.mf

Manifest-Version: 1.0
Class: moon.star.TestOne moon.star.TestTwo
Created-By: 1.6


将hello.mf保存到C:\1000目录中,为了使用jar命令来生成一个jar的文件,首先需要进入到C:\1000目录,即进入包名的上一层目录,然后使用jar命令来生成一个名字为Jerry.jar的文件。

C:\1000> jar cfm Jerry.jar hello.mf moon\star\TestOne.class moon\star\TestTwo.class


如果C:\1000\moon\star只有TestOne.class和TestTwo.class两个字节码文件,也可使用jar命令。

C:\1000> jar cfm Jerry.jar hello.mf moon\star\*.class


最后,将jar命令在C:\1000目录中生成的Jerry.jar文件复制到Java运行环境的扩展中,即将该Jerry.jar文件存放在JDK安装目录的jre\lib\ext文件夹中。


无包名的类

如果TestOne和TestTwo类没有包名,只需将TestOne.java和TestTwo.java保存到C:\1000中,编译得到字节码文件。编写一个清单文件,然后保存到C:\1000中,进入到C:\1000目录,使用jar命令。

C:\1000> jar cfm Jerry.jar hello.mf TestOne.class TestTwo.class


如果C:\1000只有TestOne.class和TestTwo.class两个字节码文件,也可使用jar命令。

C:\1000> jar cfm Jerry.jar hello.mf *.class


最后,将jar命令在C:\1000目录中生成的Jerry.jar文件复制到JDK安装目录的jre\lib\ext文件夹中,应用程序就可以直接使用Jerry.jar文件中的TestOne.class和TestTwo.class。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)