Java包执行

Java包执行,java,directory,package,Java,Directory,Package,我的情况如下: 我有一个文件夹结构: C:\Users\user\Desktop\JavaTraining\Chapter3\examples. 示例也是一个文件夹。现在,我在第3章文件夹中有一个文件名Calculator.Java,其中包含package语句package Chapter3。因此,在命令行中,我将JavaTraining目录中的文件编译为javac Chapter3\Calculator.java,编译后,我看到生成了一个文件Calculator.class。但是当我从Jav

我的情况如下: 我有一个文件夹结构:

C:\Users\user\Desktop\JavaTraining\Chapter3\examples.
示例也是一个文件夹。现在,我在第3章文件夹中有一个文件名
Calculator.Java
,其中包含package语句
package Chapter3。因此,在命令行中,我将
JavaTraining
目录中的文件编译为
javac Chapter3\Calculator.java
,编译后,我看到生成了一个文件
Calculator.class
。但是当我从
JavaTraining
目录运行命令
java Chapter3.Calculator
时。它向我抛出了一个
错误:找不到文件或加载主类Chapter3.Calculator

然后,我在
Chapter3
中创建了一个子文件夹,名为
examples
,并将
Calculator.java
复制到examples文件夹中,并尝试编译和执行文件,将Chapter3作为根文件夹(从Chapter3目录执行命令)。没有错误,文件已执行

请任何人解释一下为什么会发生这种事,或者背后的原因是什么,我快疯了

Calculator.java
只是一个类计算器,其主函数试图从两个变量的printsum函数中求和

我浏览了
http://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean
根据上面的描述,要么是语法错误(试图执行文件的方式),要么是设置了
路径和CLASSPATH
环境变量

我甚至尝试了
echo%CLASSPATH%
以查看我的
CLASSPATH
变量是否设置为当前目录。当我从
JavaTraining
目录执行echo命令时,它确实显示了
。 当我尝试将Chapter3文件夹作为根目录时,该文件没有执行,但当我在Chapter3中创建子文件夹并将Chapter3作为根目录时,它执行了,原因可能是什么,或者我做错了什么

以下是带有输出的命令行:

C:\Users\vikas\Desktop\JavaTraining>javac Chapter3\Calculator.java

C:\Users\vikas\Desktop\JavaTraining>java Chapter3.Calculator
Error: Could not find or load main class Chapter3.Calculator

C:\Users\vikas\Desktop\JavaTraining>cd Chapter3

C:\Users\vikas\Desktop\JavaTraining\Chapter3>javac examples\Calculator.java

C:\Users\vikas\Desktop\JavaTraining\Chapter3>java examples.Calculator
The sum is 30

C:\Users\vikas\Desktop\JavaTraining\Chapter3>
Calculator.java文件:

// One Package Statement
package chapter3;
// The file in Chapter 3 folder, file in example folder has
//package examples;
// One or more import statements
import java.io.*;
import java.util.*;

// Class Declaration
public class Calculator {

    // State. Variables and Constants
    int i=10;
    long k = 20;

    // Behavior, one or more methods
     void printSum(){
         long sum;
         sum = i+ k;
    System.out.println("The sum is " + (i+k));
    }
    public static void main (String[] args) {
    Calculator c = new Calculator();
    c.printSum();
    }
}

当您构建一个文件时,最好有一个构建目录,然后java会将该类放入正确的包布局中

mkdir build
javac -d build path/to/source/Files.java
java -cp build package.name.Files

计算器在包中吗?类路径必须设置在包层次结构的顶部。如果设置为
,那么您应该从那里调用java,或者从package JavaTraining中设置一个带有标记
cp
的类路径,应该能够同时执行这两项操作:javac Chapter3\Calculator.java和java Chapter3\Calculator@LeTex例如我想是的,但事实并非如此work@pvg:类路径设置为“”,你能详细解释一下你的意思吗