//A.java
package org.pj.pkg;
public class A{
}
//B.java
package org.pj.pkg;
public class B{
public void running(){
A a = new A();
System.out.println("OK !");
}
public static void main(String[] args){
B b =new B();
b.running();
}
}
我在F盘下新建一个new文件夹,将A.java 和 B.java 两个文件都放在里面
启动命令行 首先编译A.java
C:\Documents and Settings\pj>javac -d F:\new f:\new\A.java
生成A.class文件她的目录是 F:\new\org\pj\pkg
再编译B.java
C:\Documents and Settings\pj>javac -d F:\new f:\new\B.java
但是并不是我所期望的那样,会出现如下错误
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^ ^
2 错误
提示说找不到类A,于是我很自然的认为需要设置classpath
C:\Documents and Settings\pj>set classpath = F:\new
C:\Documents and Settings\pj>set classpath
classpath = F:\new
C:\Documents and Settings\pj>javac -d F:\new f:\new\B.java
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
2 错误
也许你会认为classpath的路径不对,于是重新设置
C:\Documents and Settings\pj>set classpath = F:\new\org\pj\pkg
C:\Documents and Settings\pj>set classpath
classpath = F:\new\org\pj\pkg
C:\Documents and Settings\pj>javac -d F:\new f:\new\B.java
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
2 错误
但是仍然找不到类A,奇怪吧
于是我采用了在运行时制定类的寻找路径
C:\Documents and Settings\pj>javac -d F:\new -cp F:\new\org\pj\pkg f:\new\B.jav
a
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
f:\new\B.java:5: 找不到符号
符号: 类 A
位置: 类 org.pj.pkg.B
A a = new A();
^
2 错误
但是还是错误,把类的寻找路径改了一下,编译终于通过了
C:\Documents and Settings\pj>javac -d F:\new -cp F:\new f:\new\B.java
下面就是执行B.class文件了,也有很大的蹊跷.与上面的情况一样,我通过设置classpath环境变量各种方法,只有下面的这种方法能构正确执行
C:\Documents and Settings\pj>java -cp F:\new org.pj.pkg.B
OK !
这里需要主意的几个关键点:
1. 在使用javac命令编译互访性包文件的时候(比如上面的B访问A),需要用参数 -cp 指明类的寻找路径为包所在的路径,第三个参数应该是类的完整路径.
2. 在使用java命令执行这种包文件的时候,也需要用参数 -cp 指明类的寻找路径为包所在的路径,后面的参数中应该以 . 来间隔包类各层次文件夹之间的关系.
在这里使用set classpath 的方式似乎不能解决这个问题,而在参数里加上-cp的选项才可以,的确是想不太明白.
是不是我运行的方式或者参数的设置不恰当?希望大家一起来解决一下.
分享到:
相关推荐
### 命令行编译和运行Java类 在日常的软件开发过程中,开发者经常会遇到需要在命令行环境下编译和运行Java程序的情况。本文将详细介绍如何在DOS(Disk Operating System)环境下,通过命令行工具编译和运行Java程序...
在DOS命令行模式下编译Java文件或工程是开发者必备的基本技能,尤其对于那些习惯于命令行操作或者需要在没有图形用户界面的环境中工作的人员来说。以下将详细阐述如何在DOS环境下编译单个Java文件以及整个Java工程。...
在命令行下运行Java JAR文件,可以使用以下命令: ```bash java -jar jar_file_name.jar ``` 这里的`-jar`选项告诉Java虚拟机(JVM)直接从JAR文件中加载主类并执行。 接下来,我们讨论如何在命令行下运行JUnit...
解决 Java 在 cmd 命令行的编译和运行问题需要了解 Java 命令行编译和运行的机制,正确地配置 `classpath` 环境变量,解决 `java.lang.ClassNotDefFoundError` 异常。同时,需要注意 JDK 的实现细节,不要将用户...
在命令行编译和运行Java程序时,正确设置`classpath`至关重要。`classpath`是JVM查找类和资源的目录列表。你可以通过以下方式设置`classpath`: - 在编译时使用`-classpath`或`-cp`选项: ``` javac -classpath ...
在Java编程环境中,有时...总结来说,编译和运行带有JAR包的Java程序涉及编译源代码、设置类路径、创建MANIFEST.MF文件指定主类、打包成JAR并最后运行JAR。通过使用IDE或构建工具,这个过程可以变得更加便捷和高效。
### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...
在Java编程中,命令行编译是学习和工作...总之,理解Java的命令行编译和运行机制,特别是涉及到包和类路径的概念,对于任何Java开发者来说都是基础且必要的技能。正确设置和管理类路径,能够确保程序的顺利编译和运行。
使用命令行方式开发Java程序 使用命令行方式开发Java程序 Java程序的运行机制 了解Java程序的运行机制 掌握使用命令行方式开发Java程序的步骤 Java程序的运行机制 ...打开一个DOS窗口,进入Welcome.java文件所在
通过以上步骤,我们不仅学习了如何在命令行环境下编译Java源代码、创建JAR文件,而且还掌握了如何通过修改`Manifest`文件来让JAR文件能够直接运行。这种方法对于那些需要频繁构建和部署的应用来说非常实用,同时也...
在IT行业中,动态生成、编译以及运行Java文件是一项重要的技术,它允许程序在运行时创建新的Java代码并执行。这种技术广泛应用于元编程、插件系统、代码自动生成等场景,极大地提高了软件的灵活性和可扩展性。下面将...
Java 命令行编译基础知识 Java 命令行编辑的基础知识是 Java 开发的基础之一。本文将从 Java 命令行编辑的基础知识入手,逐步讲解 Java 编程语言的基本结构和基础知识。 一、 Java 命令行编辑的基础知识 Java ...
通过上述分析,我们可以看出,在命令行下编译和运行Java程序时,需要注意以下几个关键点: - 确保源文件的位置与声明的包结构一致。 - 正确地使用 `javac` 和 `java` 命令,包括指定类路径等参数。 - 对于复杂的项目...
### Java反编译工具:将.class文件转换为.java文件 #### 概述 在软件开发领域,有时我们可能需要分析第三方库或者开源项目的内部结构,这时就需要借助于反编译工具来帮助我们阅读和理解其源码。Java作为一种广泛...
在Java编程中,动态编译和运行类是一项重要的能力,特别是在需要实时更新代码或实现热部署的场景下。本文将深入探讨如何利用Java的API来动态编译.java源文件,并执行编译后的类。 首先,Java的`javac`命令行工具是...
Java反编译是编程领域中的一个重要概念,它涉及到软件逆向工程,主要用于理解或学习已编译的Java字节码(.class文件)的工作原理。Java的源代码被编译成字节码后,虽然失去了人类可读的形式,但通过反编译工具,我们...
在日常开发中,我们通常需要通过命令行界面(CLI)来操作Java程序,这包括编译`.java`源文件为`.class`字节码文件,以及运行已编译的Java程序。这个辅助工具将这些常见操作集成到一个批处理脚本或独立的可执行文件中...
1. **jad.exe**:这是JAD反编译工具的可执行文件,可以在Windows操作系统上直接运行。用户只需要打开命令行终端,然后导航到jad.exe所在目录,即可通过命令行调用JAD。 2. **jad.rar**:这是一个RAR格式的压缩文件,...
【标签】"java小实验"表明这是一个学习或实践Java的项目,可能适合初学者用来加深对Java文件操作的理解。这个实验可以帮助开发者掌握Java的IO流操作,理解命令行参数的处理,并锻炼问题解决和调试技能。 在提供的...
以上就是用命令行编译Java并生成可执行jar包的完整过程。需要注意的是,命令行编译和打包的过程中,每个步骤都要细心检查,确保没有任何的差错。掌握这个过程对于进行Java开发,尤其是在没有集成开发环境(IDE)支持的...