如何在Java中使用来自不同文件的类?

7

我是一名 Java 的新手,这是我正在尝试做的事情:

我在 Windows 机器上的一个文件夹中有两个文件:

d:\programs\sims\javasim\src\com\jsim\
Person.java
Building.java

我在 Building.java 中使用了 Person.java 文件中的 Person 类。

package com.jsim;
ArrayList<Person> personList = new ArrayList<Person>();

我正在编译这个文件夹中的文件。

d:\programs\sims\javasim\src

但是当我尝试编译Building.Java时,编译器告诉我

d:\programs\sims\src\javac com/jsim/Building.java

com\jsim\Building.java:10: cannot find symbol
symbol  : class Person
location: class com.jsim.Building
        private ArrayList<Person>personList = new ArrayList<Person>();
                          ^

如何让 Building.java 知道 Person.java 文件中的 Person 类?

Gath


4
两个类的package是相同的吗? (package com.jsim;) - MByD
请提供Person类和Building类的完整源代码。 - Derek Mahar
我已经编辑了编译器错误。com\jsim - gath
1
d:\programs\sims\src\javac com/jsim/Building.java com/jsim/Person.java - David Lantos
您可能想查看http://download.oracle.com/javase/1.3/docs/tooldocs/win32/javac.html以获取更多信息(请检查类型搜索部分)。 - David Lantos
显示剩余2条评论
5个回答

4

执行 javac *.javajavac Person.java Building.javajavac Building.java Person.java 来编译你的类。

似乎在编译 Building.java 文件之前没有编译 Person.java。

Building 需要 Person 的 class 文件进行编译,而不是 .java 文件。


2

您需要使您的包名和导入保持一致。您发布的信息包含两个不同的包名,因此您需要将这些类放在同一个包中或添加一个导入语句。


0

你必须导入你所引用的类:

import Person;

我不同意 - 看起来他正在使用相同的包名称(com.jsim),这意味着您不需要导入那些类,因为它们在同一个包中。 - Liv

0

我认为问题确实出现在这一行代码:

private ArrayList<Person>personList = new ArrayList<com.liftsim.Person>();

由于您编写的类与其他类(com.jsim)在同一个包中,因此无需导入任何内容。但是,在初始化时,您似乎指定了完全不同的类名(我猜测您使用了Eclipse自动完成?)-- 因此,请删除所有导入并将上述行重写为以下内容:

private ArrayList<Person>personList = new ArrayList<Person>();

重新编辑了我的问题,看起来和你说的一样,但仍然无法编译。 - gath
你是否从命令行编译?如果是的话,由于你使用了包名,你需要使用-d参数来指定目标文件夹,以便生成与目录(包)结构一起的.class文件,就像这样:javac -d out/ - Liv
尝试过这个但失败了 javac -d ../classes com/jsim/Building.java 我已经创建了必要的目标文件夹(classes)。 - gath
Building.java在哪个目录下? - Liv
d:\programs\sims\javasim\src\com\jsim\ - gath

0
我发现在使用Eclipse时,我不能在同一包中的其他文件中使用“非公共”类。请注意,当这种情况发生时,我正在使用默认包。当我打开两个文件并在编辑器中打开两个窗口时,这种行为会改变。在这种情况下,我可以在其他文件中使用类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接