分享

Java程序的编译、执行和打包

 c 资料收集 2014-09-21
    对于习惯了C/C++或刚开始学习编程的人来说,常会被Java的编译执行打包,以及类库包的设置,特别是CLASSPATH弄的晕乎乎的,下面就总结一下吧。

1. 从最基本的HelloWorld开始

新建目录C:\work作为工作目录,创建如下子目录C:\work\com\jayzzz\test\,并在test子目录下创建hw.java文件。(Java语言规范说明了命名Java包的时候应当采用与其域名相反的顺序命名,而Java包的命名反映到操作系统里就是目录。)
  com\jayzzz\test\hw.java 源代码
public class hw {
  public static void main(String[] args) {
    System.out.println("Hello world from com.jayzzz.test.\n");

  }
}

编译之前,要确保包含java、javac、jar等可执行文件的目录(类似于X:\Java\jdk1.6.0_22\bin)在PATH路径中。之后在命令行控制台中执行:
C:\work>javac com\jayzzz\test\hw.java

这时,顺利在目录test下生成hw.class文件,下面执行这个文件,有2种方法:
C:\work>java -classpath com\jayzzz\test hw

C:\work\com\jayzzz\test>java hw
注意:
第一,不能写hw.class,要写类名hw。
第二,如果不在当前目录,必须增加参数-classpath或-cp来指定制定执行时的类搜索路径。

下面我们在hw.java里增加一句话:
  com\jayzzz\test\hw.java 源代码v2
package com.jayzzz.test;
public class hw {
  public static void main(String[] args) {
    System.out.println("Hello world from com.jayzzz.test.\n");

  }
}
这句话告诉编译程序hw类属于com.jayzzz.test包,编译出来的hw.class就包括此信息,这样通过java.exe执行的时候就能搜索到该类了。正确编译之后,除了上述2种执行方法外,又多了一种方法:
C:\work>java com.jayzzz.test.hw

2. 开始引入其它库中的类

下面在com\jayzzz目录下新建一个lib目录,并在com\jayzzz\lib\下新建一个hwlib.java文件,代码如下:
  com\jayzzz\lib\hwlib.java 源代码
package com.jayzzz.lib;
public class hwlib {
  public hwlib() {
    System.out.println("This is from Hello World Library!\n");

  }
}
这是个简单的类,每当创建一个实例时就会打印一句话。

修改com\jayzzz\test\hw.java如下:
  com\jayzzz\test\hw.java 源代码v3
package com.jayzzz.test;
import com.jayzzz.lib.*;
public class hw {
  public static void main(String[] args) {
    hwlib t = new hwlib();
    System.out.println("Hello world from com.jayzzz.test.\n");

  }
}
line 2告诉编译器,我需要引用com.jayzzz.lib下的所有类。
line 5创建了hwlib类,由刚才的hwlib类的定义可知,执行到此处会打印一句话。
import关键字和C/C++中的#include不同,和namespace类似。

我们无需去编译hwlib类,javac会自动在编译hw.java时查找它导入的类并自动编译。编译执行过程如下:
C:\work>javac com/jayzzz/test/hw.java
C:\work>java com.jayzzz.test.hw
This is from Hello World Library!

Hello world from com.jayzzz.test.


3. 打包并自动执行

程序写完了,松松散散成百上千个文件散布在无数目录,发布起来一定头疼的要命。那么打包成jar文件(实质上就是zip压缩包)就成了。执行如下:
C:\work>jar cvf first.jar com

其中jar是Java自带打包程序;cvf是参数,创建并显示详细信息;first.jar是目标文件名;com是源码最上层目录。执行完毕之后顺利生成first.jar文件。可以通过如下方式执行:
C:\work>java -classpath first.jar com.jayzzz.test.hw
This is from Hello World Library!

Hello world from com.jayzzz.test.


如果想时用户双击即可执行该jar文件那么就要修改其中的MANIFEST.MF文件,指定Main-Class是什么。我们可以新建一个文件MANIFEST.MF,并保存在C:\work工作目录中:

  MANIFEST.MF 源代码
Main-Class: com.jayzzz.test.hw

Main-Class: 大小写要注意,冒号后有空格。这句话告诉jar解释程序从com.jayzzz.test.hw开始执行(该类是包含main方法的类)。
更新jar文件如下:
C:\work>jar umf MANIFEST.MF first.jar

新生成的first.jar便可以自动执行了,在Windows中双击或通过如下命令行均可执行。
C:\work>java -jar first.jar

4. 总结、错误避免

a) 代码编写过程注意类名完全符合文件名,大小写敏感。
b) 代码编译过程如果import了其他类,必须在CLASSPATH环境变量或参数-classpath/-cp里指定jar包路径或类库路径。
c) 代码执行过程必须以类名作为执行对象,同时要在CLASSPATH或参数-classpath/-cp里指定所调用的jar包或类库路径。
d) Exception in thread "main" java.lang.NoClassDefFoundError 是最常见的错误。通常都是CLASSPATH或源代码中类库路径没有配好,请再次检查自己的命令行或源代码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多