开始学习java--再谈设置Path与Classpath(如何import jar中的class)

来源:互联网 发布:迎乐软件科技有限公司 编辑:程序博客网 时间:2024/04/30 05:07
巍--并刀如水
 
 
查看文章
   
开始学习java--再谈设置Path与Classpath(如何import jar中的class)
2008-03-29 16:30

关于Java的Classpath详解
Java 的新入门者对classpath往往比较困惑,为何在开发环境中能运行的东东出去就不好,或在外面运行的东东挺溜的进了开发环境就死菜。
  java的优点就是他是一个自动支持网络功能的东东,举一个简单例子来将

  比方有一个Application用到了java.lang.String(事实上要是有一个程序没用到它,太难以想象了)和com.shinechina.MyClass(我自己写的)这两个类。

  版本1:


package com.shinechina;
public class MyClass
{
public static void main(String args[])
{
String str = "版本1: hello, welcome to chinaasp java 技术";
System.out.println(str);
}
}

  版本2:


package com.shinechina;
public class MyClass
{
public static void main(String args[])
{
String str = "版本2:hello, welcome to chinaasp java 技术";
System.out.println(str);
}
}

  现在我要运行它了

   java com.shinechina.MyClass

  现在问题来了

  Java怎么知道到何处找呢, 他到底该怎么办

  假定版本一在 c:/mylib/com/shinechina/MyClass.java

  假定版本二在 d:/mylib/com/shinechina/MyClass.java

  注意:不要忘了编译成class文件吆, java文件是不能执行的

   cd c:/mylib/com/shinechina
   javac *.java
   cd d:/mylib/com/shinechina
   javac *.java


  有了:

  他先到机器的CLASSPATH去找,假设是windows系统 c:/mylib;d:/mylib;d:/jdk1.2.2/lib/rt.jar;
或unix系统 /home/local/:/usr/local/:/usr/local/jdk1.2.2/lib/rt.jar。好, c:/mylib下他找到了com目录,有戏, 又往下找又有shinechina目录,目录下找到了MyClass.class, Ok 就是他了,至于d:/mylib我的版本2的MyClass他就不理会了,至于String是在rt.jar压缩包中待会再讲他

  执行的结果就是

   版本1: hello, welcome to chinaasp java 技术

  反过来d盘的路径在c:之前,执行的结果就是

   版本2: hello, welcome to chinaasp java 技术

  依次类推, 只有在类路径上第一个找到的才会执行,你要控制他执行那一个须如此:

   java -classpath d:/mylib;%classpath% com.shinechina.MyClass

  执行的结果就是

   版本2: hello, welcome to chinaasp java 技术

  开发环境中的执行就是这样,总有一个地方指定类路径的。

  注意,开发环境往往不去读系统路径, 这也就是在外面运行的东东挺溜的进了开发环境就死菜的原因喽。

  比如说jbuilder, jdevoloper从菜单project->project properties...->paths标签->Add...->添加定义好的library点ok或者new->输入name和classpath->ok。这个东东就被添加到了classpath中(运行时可在message view中看到)

  再比如说visualAge for java , 点中你要运行的类->鼠标右击选中特性->类路径标签1。->编辑->全选,好,开发环境中的所有类都能找到了。

  2、立即计算(只选中你需要的类, 如果有用class.forName之类通过程序显式装载的类的话,需要自己从编辑中手工家入了, 开发环境每能力帮你算出来了,如果内存没有问题的话,直接编辑->全选更方便吆)

  3、如果你的类并不想引入开发环境的话,点中添加额外路径,编辑(下面的一个), 我不喜欢这样, 就不详细介绍了

  高手的话,直接用jdk, 那么只好麻烦你要么加到系统classpath中(unix下为$CLASSPATH), 要么编译运行时显式指明classpath

  下面介绍一个初学者最容易犯的错误

  还以上节介绍的例子

  假定版本一在 c:/mylib/com/shinechina/MyClass.java

  编译后c:/mylib/com/shinechina/MyClass.class

  怎么指定classpath呢

  常见毛病

   1、c:/mylib/com/shinechina/

   2、c:/mylib/com/

  正确

   1、c:/mylib/

   2、c:/mylib  

============================================================

Java程序开发中,ClassPath是寻找Java类的路径,如同DOS里面的path一样。

Java的类的封装结构是 package.Class,比如说我的ClassPath是如下设置的:
set classpath="d:/java_class"

那么我们有一个类是 chen.Rose,编译好后怎么存放呢?

答案是,我们可以在d:盘的java_class目录下建立一个chen子目录,然后把Rose.class文件复制到该子目录下,看起来好下:
d:/java_class/chen/Rose.class

这样我们在以后使用时,只需如下调用就可以
import chen.Rose;
class SendRose {
Rose newRose;
... ...

同理,我们建立的chen包下的Flower类:
package chen;
class Flower {
...
}

编译后将Flower.class文件复制到 d:/java_class/chen目录下,
就可以在其它的地方引用了,甚至可以使用 import chen.*;

一些公司把它们的一组类往往打包发行,把这个包压缩成Jar或Zip,设置的方法如下:
set classpath="d:/java_class;d:/oracle/ora.jar"
你只需把文件名包含到 classpath中去即可正确地引用该压缩包中的类了。 (如何在代码中import jar中的class参见最后的总结5))

对于jdk1.3以上的版本,引用java.*,sun.*等系统包不需要设置classpath.

使用当前目录下的类需要将点包含在classpath中,如下所示:

set classpath=".;d:/java_class"

注意:与设置path一样,不同路径之间用分号分隔开。

=======================================================================

总结:

1、在Java程序开发中,ClassPath是JVM寻找Java类的路径,也是java.exe执行解释时需要的类路径。

2、Java类的结构是:Package.class (或Package/class),所以,ClassPath设置的路径不能包括包名(在windows中也就是目录名)

3、如果你在包含类的当前目录下(不进入到包目录中)执行java.exe pakcage.class,那么不需要设置classpath,因为java.exe可以在默认当前目录寻找类并执行(当然,一个名为 a.b.class 的类首先必须放置到 ../a/b/目录下才能被正确找到),但是如果你需要在任何目录下执行java.exe pakcage.class就必须设置classpath。

4、优先级问题:因为JDK5.0以上可以不设置classpath在当前目录下,按包名对应的目录寻找到需要执行的类,但是,如果我们同时也设定了环境变量classpath,而且当前路径下和classpath设定的路径下有同名的类,那么会执行哪一个?答案是:环境变量设置优先(也只执行先找到的那一个)。这有兼容性的考虑,因为jdk5.0之前,是必须设置classpath的,没有默认当前路径的特性。

5)对于一些公司把它们的一组类打成jar包发行,除了在设置classpath时用全名,在代码中需要使用jar中的class时,如何import呢?也很简单,以插件easyexplore.jar为例,先在classpath中设置:set classpath=%classpath%,L:/eclipse/plugins/easyexplore.jar。解开jar发现他的class是在如下目录中../org/sf/easyexplore/,也就是说它的class的包名是org.sf.easyexplore,所以在代码中可以通过 import org.sf.easyexplore.*; 来使用他提供的类。如果不设置classpath,那么也可以将jar文件放在任何位置,只要在命令行也可以通过如下形式使用即可。

javac -classpath   L:/eclipse/plugins/easyexplore.jar    self.java

(self.java就是设置了import,需要使用jar中类的源程序,所以,jar可以放置于任何目录下。但前提是jar包必须在环境变量的classpath中指定或在命令行的-classpath参数中指定)

        如果需要在eclipse中使用,则引入jar文件的流程如下:在工程项目的根目录点击右键查看属性(Properties),选择java build path的条目点击Libraries标签,点击"add External jar" 的按钮,选取你要载入的jar文件打开确定就可以了。

己相关引用: