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。
本文固定URL:https://www.dotcpp.com/course/757
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程