“化繁为简”-神奇的Jar命令 | 带你学《Java面向对象编程》之六十九

上一篇:导入其他包,轻松实现跨包调用 | 带你学《Java面向对象编程》之六十八
【本节目标】
通过阅读本节内容,你将了解到Java中打包的概念,了解Java系统常用的包,学会使用jar命令打出一个jar文件并能通过配置在其他类中调用包内的类。

Jar命令

当一个项目开发完成之后一定会存在有大量的*.class文件,那么对于这些文件的管理往往可以利用一种压缩结构的形式进行处理,而这样的结构在Java之中就被称为Jar文件,如果要想将程序打包为Jar文件,那么可以直接利用JDK提供的Jar命令。
在最原始的时候如果要想知道jar命令的时候直接输入jar即可,而在JDK1.9之后为了统一化,所以需要使用“--help”查看相关的说明。

“化繁为简”-神奇的Jar命令   | 带你学《Java面向对象编程》之六十九
图一 jar命令相关说明

下面通过程序的具体演示来实现jar的使用与配置的操作。
1、定义一个程序类,这个类的代码如下:

package cn.mldn.util ;
public class Message {
    public String getContent() {
        return "www.mldn.cn" ;
    }
}

2、对程序进行编译与打包处理:

  • 对程序打包编译:javac -d . Message.java;
  • 此时会形成cn的包,包里面有相应的子包与*.class文件,将其打包为mldn.jar:jar -cvf
    mldn.jar cn;

    • “-c”:创建一个新的jar文件;
    • “-v”:得到一个详细输出;
    • “-f”:设置要生成的jar文件的名称,此处定义的是“mldn.jar”;

“化繁为简”-神奇的Jar命令   | 带你学《Java面向对象编程》之六十九
图二 打包处理

3、每一个*.jar文件都是一个独立的程序路径,如果要想在Java程序中使用此路径,则必须通过CLASSPATH进行配置;
SET CLASSPATH=.;d:mldndemomldn.jar
4、建立测试类,直接导入Message类,并且调用方法 ;

package cn.mldn.test ;
public class TestMessage {
    public static void main(String  args[]) {
        cn.mldn.util.Message msg = new cn.mldn.util.Message() ;    //实例化类对象
        System.out.println(msg.getContent()) ;
    }
}

随后就可以正常编译TestMessage类并且使用这个类:

  • 编译程序类:javac -d . TestMessage.java;
  • 解释程序:java cn.mldn.test.TestMessage。

如果此时程序编译通过之后,但是由于CLASSPATH发生了改变,类无法加载到了,则执行TestMessage类的时候将会出现如下的错误提示:
Exception in thread ”main” java.lang.NoClassDefFoundError: cn/mldn/util/Message
出现这种错误只有一种情况:*.jar包没有配置正确。
JDK1.9之后出现的模块化操作

  • 在JDK1.9以前所有的历史版本之中实际上提供的是一个所有类的*.jar文件(rt.jar、tools.jar),在传统的开发之中只要启动了java的虚拟机,那么就需要加载这几十兆的类文件;
  • 在JDK1.9之后提供了一个模块化的设计,将原本很大的要加载的*.jar文件变成了若干个模块文件,这样在启动的时候可以根据程序加载指定的模块(模块中有包),就可以实现启动速度变快的效果。

系统常用包

Java语言从发展至今一直提供有大量的支持类库,这些类库一般由两个方面组成:

  • Java自身提供的(除了JDK提供的之外还会有一些标准);
  • 由第三方厂商提供的Java的支持类库,可以完成各种你所需要的功能,并且支持的厂商很多;

而在JDK之中也会提供有大量的类库,并且这些类库都是封装在不同的开发包之中的:

  • java.lang:像String、Number、Object等类都在这个包里面,这个包在JDK1.1之后自动默认导入;
  • java.lang.reflect:反射机制处理包,所有的设计从此开始;
  • java.util:工具类的定义,包括数据结构的定义;
  • java.io:进行输入与输出流操作的程序包;
  • java.net:网络程序开发的程序包;
  • java.sql:进行数据库编程的开发包;
  • java.applet:Java最原始的使用形式,直接嵌套在网页上执行的程序类;

    • 现在的程序已经以Application为主了(有主方法的程序);
  • java.awt、javax.swing:Java的图形界面的开发包(GUI),其中awt是属于重量级的组件,而swing是轻量级的组件;

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:访问权限进修课-protected | 带你学《Java面向对象编程》之七十
更多Java面向对象编程文章查看此处

上一篇:解析预定义变量的用法


下一篇:访问权限,public private protected