首页 > 解决方案 > 爪哇 | 自定义创建的包不存在

问题描述

目的

设置

这是我的 LetterGrader.java 文件:

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

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

这是我的 TestLetterGrader.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

这是我此时的工作目录

  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

问题

标签: javapackageclasspathmethod-call

解决方案


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

文件结构:

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

然后删除构建文件夹中的所有内容并编译类。Java 将使它变得神奇。您确实需要担心 bin 文件夹,它仅用于存储已编译的类。

类将如下所示:

//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
  }
}

你的第二个问题:

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

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

您必须更改private void ...为,public void...因为您不能在课堂外调用 private。

当您运行已编译的类时,它们必须位于同一文件夹中。


推荐阅读