Java |自定义创建的包不存在
Java | Custom Created Package Does not Exist
目的
- 我希望能够创建一个包并调用它。
- 或者,我想为我的方法创建单独的文件(以避免在一个文件中包含 x classes)。
设置
这是我的 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
}
}
已采取的步骤
- 首先,我编译 LetterGrader:
- 此自动创建 bin/grade/util/LetterGrader.class 文件
javac -d bin -sourcepath src src/grade/util/LetterGrader.java
Here is my working directory at this point
- 其次,我编译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
问题
- 我相信我误解了如何从单独的文件(在同一位置)调用 classes。我怎样才能做到这一点?
您正在导入 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。我想我需要巩固一下我的理解。
谢谢你帮助我!
目的
- 我希望能够创建一个包并调用它。
- 或者,我想为我的方法创建单独的文件(以避免在一个文件中包含 x classes)。
设置
这是我的 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
}
}
已采取的步骤
- 首先,我编译 LetterGrader:
- 此自动创建 bin/grade/util/LetterGrader.class 文件
javac -d bin -sourcepath src src/grade/util/LetterGrader.java
- 此自动创建 bin/grade/util/LetterGrader.class 文件
Here is my working directory at this point
- 其次,我编译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
问题
- 我相信我误解了如何从单独的文件(在同一位置)调用 classes。我怎样才能做到这一点?
您正在导入 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。我想我需要巩固一下我的理解。
谢谢你帮助我!