Java-关于类路径变量classpath

本文详细介绍了在Java环境中如何正确地设置classpath,确保程序能够顺利编译和运行。通过具体的例子,展示了不同路径设置下Java编译器和运行时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    P198.

    已知目录D:/WorkSpace/Java/5 下,有包Geometry和文件夹TryPackage,包Geometry中含有java文件Line,Point。文件夹TryPackage下含有java文件TryPackage,该文件需要引用Geometry.  源文件如下:

import Geometry.*;    // Import the Point and Line classes

public class TryPackage {
 public static void main(String[] args) {
  double[][] coords= {{1.0, 0.0}, {6.0, 0.0}, {6.0, 10.0}, {10.0, 10.0}, {10.0, -14.0}, {8.0, -                      14.0}};
  
  // Create an array of points an fil it with Point objects
  Point[] points = new Point[coords.length];
  for (int i = 0; i < coords.length; i++) {
   points[i] = new Point(coords[i][0], coords[i][1]);
  }
  Line[] lines = new Line[points.length - 1];
  double totalLength = 0.0;       // Store total line length here
  for (int i = 0; i < points.length -1; i++) {
   lines[i] = new Line(points[i], points[i+1]);  // Create a Line
   totalLength += lines[i].length();    // Add its length
   System.out.println("Line " + (i+1) + " " + lines[i] + " Length is " + lines[i].length());
  }

  // Output the total length
  System.out.println("/nTotal line length = " + totalLength);
 }
  
}

 

在编译过程中,命令行当前路径为:D:/WorkSpace/Java/5 ,执行以下命令:

D:/WorkSpace/Java/5 >set classpath=D:/WorkSpace/Java/5

D:/WorkSpace/Java/5 >cd D:/WorkSpace/Java/5/TryPackage

D:/WorkSpace/Java/5/TryPackage >javac TryPackage.java

则编译成功,在包Geometry和文件夹TryTryPackage下都找到了相应的类文件,即编译TryPackage.java时,编译器根据classpath找到了目录D:/WorkSpace/Java/5下的包Geometry,但是,如果我们继续执行命令:

D:/WorkSpace/Java/5/TryPackage >java TryPackage

那么,编译器将报错:Exception in thread "main" java.lang.NoClassDefFoundError: TryPackage

虽然当前目录为TryPackage.class所在目录,但是,classpath路径为D:/WorkSpace/Java/5,编译器将根据classpath值寻找类文件,而在该目录下,并没有类TryPackage,故,编译器报错。

处理方法是:在classpath中加入当前目录, 即 set classpath=.;D:/WorkSpace/Java/5

那么,我们在目录D:/WorkSpace/Java/5/TryPackage下编译TryPackage.java,再运行java TryPackage命令,则成功运行。

 

同样的,我们可以退出到目录D:/WorkSpace/Java/5,该目下含有包Geometry和包含有TryPackage.java文件的文件夹TryPackage,我们设置 set classpath=.;D:/WorkSpace/Java/5/TryPackage  ,那么,当前路径:D:/WorkSpace/Java/5下,执行以下命令:

D:/WorkSpace/Java/5>javac TryPackage.java

则编译器根据classpath路径值,找到文件TryPackage.java并编译,而在编译过程中,又根据当前目录和classpath值,找到当前目录下的包Geometry,从而成功编译。显然,我们在当前目录下执行命令:java TryPackage    命令,虽然该目录下并没有类文件TryPackage.class,但是,编译器根据classpath路径值,找到了TryPackage文件夹下的TryPackage.class,执行成功。

 

缺省状态下,编译器将在当前目录下寻找 .java文件和 .class 文件以及包,故,如我们将包Geometry复制到文件夹TryPackage下,并进入该文件夹,使当前目录为: D:/WorkSpace/Java/5/TryPackage,在该目录下,编译和执行 都将成功进行。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值