a137705801 2013-04-25 11:10
浏览 488
已采纳

带包名的.class文件为何不能在.class文件所在目录运行

大家好,我的问题是这样的,我在G:/javaTest文件下建立的Hello.java,源码如下:

package gdgz.lwj;
public class Hello{
 
 public static void say(){
  System.out.println("hello,java!");
  }
  public static void main(String args[]){
   Hello.say();
   }
 }

当我在G:/javaTest 目录下执行 javac -d . Hello.java文件后,再执行 java gdgz.lwj.Hello 执行成功,但是当我进入G:/javaTest /gdgz/lwj目录(也就是Hello.class文件所在目录) 执行 java Hello时就G:/javaTest 出错了,具体如下

G:\javaTest>java gdgz.lwj.Hello
hello,java!

G:\javaTest>cd gdgz

G:\javaTest\gdgz>cd lwj

G:\javaTest\gdgz\lwj>java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: gdgz/lwj/Hello)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: Hello.  Program will exit.

我们知道如果刚才的Hello.java文件没有带包名,也就是package内容,我们是可以在.class文件所在目录去运行的,我不明白的就是为什么带了包名后了就不能在.class文件所在的目录下去运行,请大家指教。

  • 写回答

5条回答

  • iteye_9831 2013-04-25 13:12
    关注

    新手最容易犯的错误。

    可以在任意目录下执行Java命令。但需要注意:

    1、Java命令的参数是“类的完整类名”,而不是“文件名”。
    所以,不管在任何目录下运行gdgz.lwj.Hello类,都不能简单写作java Hello,
    而需要写成下面形式:

    2、如果类路径不在当前目录下,就需要自己设置classpath参数。

    例如:
    G:\javaTest>java gdgz.lwj.Hello
    或者
    G:\javaTest\gdgz\lwj>java -cp G:\javaTest gdgz.lwj.Hello
    或者
    任意目录下>java -cp G:\javaTest gdgz.lwj.Hello

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?