0 1

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

大家好,我的问题是这样的,我在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文件所在的目录下去运行,请大家指教。

2013年4月25日 11:10

5个答案 按时间排序 按投票排序

0 0

采纳的答案

新手最容易犯的错误。

可以在任意目录下执行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

2013年4月25日 13:12
0 0

这也许是java操蛋的地方之一

2015年11月03日 14:20
0 0

是不是因为jvm找到的.class文件包名是gdgz/lwj/  与命令不符。

具体是不是得看看jvm如何执行的了? 高手回答吧

2013年4月25日 11:32
0 0

这是classpath设置问题  如果你设置为 . 默认就是到当前目录去找类 执行

此时你可以设置classpath为
.;G:/javaTest

2013年4月25日 11:30
0 0

应该在G:/javaTest下执行:
java gdgz.lwj.Hello

编译的时候直接指定文件就行了,但是执行的时候肯定是需要带包名的。

2013年4月25日 11:26

相关推荐

    Java反编译工具把.class文件转换为.java文件

    - 指定输出目录:使用选项`-d`指定输出文件所在的目录,如`jad -d test *.class`将把反编译后的文件存放在名为`test`的目录中。 - 递归处理子目录:若想对整个包含多个子目录的项目进行反编译,可以使用`-r`选项,...

    么把.class文件反编译成.java 经修改后再编译成.class

    在实际开发中,我们可能需要反编译.class 文件以便于修改或 debugging。下面将详细介绍.class 文件反编译到.java 文件的过程,包括反编译工具的使用和反编译后的修改、再编译等步骤。 一、反编译工具的选择 在反...

    如何将.class文件打成jar包

    - 在 `.class` 文件所在目录创建一个名为 `manifest.txt` 的文件。 - 在文件中添加以下内容:`Manifest-Version: 1.0` - 将文件重命名为 `manifest.mf`。 2. **使用 `manifest.mf` 文件**: - 执行 `jar` 命令...

    jclasslib 工具修改.class文件,同时需要jad.exe做辅助

    打开之后找到 要修改提示信息 的class文件 这里找到的是GenEntity 找到对应需要修改的代码所在的方法名 我这里包含提示信息的这段代码在方法 getAllDataBase() 如下图: 2.用jd-gui或者winrar把GenEntity.class 解压...

    Test.class文件

    编译成功后,会在同一目录下生成名为“Test.class”的文件,这个文件包含了由源代码编译得到的字节码。 3. **运行程序**: - 执行字节码文件:通过“java Test”命令来运行编译好的“Test.class”文件。这里需要...

    将class文件打包成jar文件

    将class文件打包成jar文件是Java开发中常见的需求,尤其在使用WebService的SOAP协议时,为了实现远程调用,往往需要将本地的类文件(.class)打包成jar包进行分发。本文将深入探讨这一过程,包括手动压缩和利用...

    eclipse查看jar包class文件源码插件,jar包反编译查看工具

    本文将详细介绍如何在Eclipse中使用插件实现这一功能,以及一种名为JD的jar包反编译查看工具。 首先,我们来看一下"Eclipse查看jar包class文件源码插件"。Eclipse中常用的插件有JD-Eclipse和Decompiler。JD-Eclipse...

    java .class反编译成.java工具

    首先,我们要明白什么是.class文件和.java文件。在Java编程中,程序员编写的是.java源代码文件,这些文件经过Java编译器(javac)编译后,会生成对应的.class文件,这是Java虚拟机(JVM)能够执行的二进制格式。然而...

    eclipse反编译.class文件

    然而,有时我们可能需要查看或理解已编译的.class文件,因为它们是Java源代码(.java)经过编译后的二进制形式,不包含可读的源代码。这时,我们就需要用到反编译工具,将.class文件转换回.java源代码。本文将详细介绍...

    eclipse打开java类编译后的class文件所在目录

    在Eclipse中,每个Java项目都有一个名为"bin"或"classes"的默认输出目录,这是编译后.class文件的存放位置。你可以通过以下步骤查看或更改这个路径: 1. 在Eclipse的工作区中,选择你的Java项目。 2. 右键点击项目...

    反编译工具 可以查看.class文件

    此外,强调能很好地显示文件所在的项目目录,表明该工具在展示代码结构时具有良好的上下文关联性,有助于开发者追踪代码在整个项目中的位置和作用。 标签中的".class 文件"是指Java的编译结果,每个类在编译后都会...

    javac编译成功用java运行class文件出现“找不到或无法加载主类”的问题解决起来很简单.doc

    如果我们在 cmd 下运行 java 命令,需要确保当前目录是 Java 源文件所在的目录,这样生成的 Class 文件也将在该目录下,java 命令将可以正确地找到该 Class 文件。 在 cmd 下运行 java 命令时,需要注意当前目录...

    java编译class文件

    3. 使用`javac`编译:打开命令行终端,导航到`.java`文件所在的目录,然后输入`javac 文件名.java`命令。这将编译指定的`.java`文件,生成对应的`.class`文件。如果源代码中有多个类,每个类都会生成一个`.class`...

    java class文件查看工具

    在Java开发过程中,有时我们需要查看或分析这些Class文件,以理解程序运行原理、调试或逆向工程。"java class文件查看工具"就是用于这样目的的专业软件,它提供了查看和解析Class文件内容的功能。 1. **Class文件...

    Xjad java class文件反编译工具

    Java类文件(class文件)是Java程序运行的基础,它们包含了机器可执行的字节码。然而,这些文件通常是二进制格式,对于人类来说难以直接阅读和理解。这就是反编译工具如Xjad的重要性所在。Xjad是一款专门用于将Java ...

    .class文件反编译工具JD-GUI

    JD-GUI就是这样一款强大的工具,专为Java程序员设计,帮助他们解析.class文件并将其转化为可读的Java源代码。 JD-GUI是一个独立的图形用户界面应用,它提供了直观的界面来快速查看和分析.class文件。通过使用JD-GUI...

    class文件编译利器

    描述中提到的使用方法极其简单:第一步,将这个“class文件编译利器”放置在待反编译的`.class`文件所在的目录下;第二步,直接双击运行该工具,它会自动扫描并处理目录下的所有`.class`文件,生成对应的源代码文件...

    Linux上执行带main方法的java文件

    - `Main-Class`: 主类的全限定名称,即包名加类名。 - `Class-Path`: 项目运行时所需的其他jar包的路径。需要注意的是,路径之间使用空格分隔,并且路径必须是相对于JAR文件的位置。 - 如果`Class-Path`中的依赖项较...

    javajar包运行及bat文件制作.doc

    1. **Java Jar 包**:jar文件是Java的一种标准打包格式,它可以包含编译后的.class文件、资源文件以及一个名为`MANIFEST.MF`的元数据文件。 2. **Bat 文件**:批处理文件(.bat)是一种文本文件,它包含了一系列...

Global site tag (gtag.js) - Google Analytics