Java |自定义创建的包不存在

Java | Custom Created Package Does not Exist

目的

设置

这是我的 LetterGrader.java 文件:

package grade.util;
import java.util.*;
import java.io.*;

public class LetterGrader {
  private void readArgs() {
          System.out.println("Hello, read CLA!");
  }
}

这是我的测试LetterGrader.java 文件:

import java.util.*;
import java.io.*;


public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}

已采取的步骤

  1. 首先,我编译 LetterGrader:
    • 此自动创建 bin/grade/util/LetterGrader.class 文件

      javac -d bin -sourcepath src src/grade/util/LetterGrader.java

Here is my working directory at this point

  1. 其次,我编译TestLetterGrader:
    • 这失败了

javac -d bin -sourcepath src src/grade/util/TestLetterGrader.java

错误信息:

src/grade/util/TestLetterGrader.java:6: error: cannot find symbol
    LetterGrader letterGrader = new LetterGrader(); // instantiate
    ^
  symbol:   class LetterGrader
  location: class TestLetterGrader

问题

您正在导入 bin 文件夹中的 class。不要那样做是行不通的。你不需要任何导入,因为 classes 在同一个地方。在 src 文件夹下制作包并将 classes 放在那里。删除 package grade.util 并将其重命名为放置 classes 的包。

文件结构:

src
 \ 
  \
  yourpackage 
       \
        \
    LetterGrader.java   TestLetterGrader.java

然后删除构建文件夹中的所有内容并编译 classes。 Java 会让它变得神奇。你不需要担心bin文件夹,它只是用来存放编译好的classes.

类 将如下所示:

//package name that you created
package yourpackage;

public class LetterGrader {
//need to be public when calling from another class
public void readArgs() {
        System.out.println("Hello, read CLA!");
}
}

//folder that you placed the .java files
package yourpackage;
//without any import

public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}

你的第二个问题:

您可以使用其他文件夹中的 classes,但您必须导入它们并且它们必须位于 src 文件夹下。

告诉您在 Second 文件夹中有 class A.java,在 Main 文件夹中有 class B.java。在这种情况下,您将导入文件夹 import Second.A; 然后调用 class A a = new A(); 当您在 a 中有您想要调用的方法时,只需执行以下操作: a.yourmethod();

您必须将 private void ... 更改为 public void...,因为您无法在 class 之外调用 private。

当你 运行 编译时 classes 它们必须在同一个文件夹中。

感谢@maratonec 的指导。

我最初的错误是,当通过终端 运行 一个程序时,我是 misunderstanding/misassigning class 路径分配变量。以下帮助了我。

编译和 运行 编译 Java 程序(在 PC 上)

• 设置工作目录(例如,JavaBook) C:\> cd JavaBook

• 编译 HelloWorld.java C:\JavaBook> javac -d bin src\HelloWorld.java

•运行程序 C:\JavaBook> java -classpath bin HelloWorld

此外,将我的所有 class 文件放在同一位置的方法简化了事情。我不必担心 class 路径。但并不理想,因为我有很多文件要处理。

至于包的创建,我会在使用它之前多尝试一下 java。我想我需要巩固一下我的理解。

谢谢你帮助我!