java - 爪哇 | 自定义创建的包不存在
问题描述
目的
- 我希望能够创建一个包并调用它。
- 或者,我想为我的方法创建单独的文件(以避免在一个文件中包含 x 类)。
设置
这是我的 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
}
}
采取的步骤
- 首先,我编译 LetterGrader:
- 此自动创建 bin/grade/util/LetterGrader.class 文件
javac -d bin -sourcepath src src/grade/util/LetterGrader.java
- 此自动创建 bin/grade/util/LetterGrader.class 文件
- 其次,我编译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 文件夹中的类。不要那样做是行不通的。您不需要任何导入,因为这些类在同一个地方。在 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。
当您运行已编译的类时,它们必须位于同一文件夹中。
推荐阅读
- c# - 使用 System.Runtime.Serialization 但未找到 IgnoreDataMemberAttribute 和 DataMemberAttribute
- django - 如何将依赖项从一个应用程序注入到另一个应用程序的 Django 类中?
- java - HTTPClient JSON 的打印键
- reactjs - 我正在从 api 查询数据,但 useffect 呈现两次,所以我无法获取信息
- core-data - SwiftUI 2.0 / CoreData 2021:没有错误但实体未保存
- java - 是否响应实体
> 将所有内容存储在内存中? - routes - 说明:depot 无法解析或不是字段
- angular - Angular Http 客户端文件下载 - 响应中的文件名
- c# - 将 XML 文件中的值读入文本框
- azure-devops - 有没有一种方法可以在预测和速度方面考虑 Sprint 中的团队能力?