Java 引用同一目录中的类

Posted

技术标签:

【中文标题】Java 引用同一目录中的类【英文标题】:Java referencing a class in the same directory 【发布时间】:2014-03-07 07:34:55 【问题描述】:

我在 Java 中创建了一个 Pair 类(类似于 c++ 对),但无法从不同的 java 文件中引用它。我在一个 Java 文件中工作,我们在与 Pair.class. 相同的目录中称它为 fileA 此外,我在两个文件的顶部都写了package current-directory

但是,当我尝试 javac fileA 时,我所有的错误都是 cannot find symbol 并且小箭头指向我的自定义 Pair 类型。

如何让 java 编译器看到 Pair.class 内部的 fileA

感谢大家的帮助

【问题讨论】:

这里附上包结构 了解 java 打包和导入的工作原理。这可以解决您的问题。 如果你正在编译文件A,它应该通过命令'javac fileA.java'来完成,即带有.java扩展名。而运行它使用没有任何扩展名的 java fileA。 【参考方案1】:

Java 由一些基本约定驱动,包括目录结构遵循包结构,java 文件以其定义的类命名。

您应该已经将 fileA 定义为 fileA.java 中的一个类,如下所示:

public class fileA 
    public static void main(String[] args) 
        Pair p = new Pair(0, 1);
        System.out.println("a is "+p.a+" and b is "+p.b);
    

以及对应的 Pair 类:

public class Pair 
    public final int a;
    public final int b;
    public Pair(int a, int b) 
        this.a = a;
        this.b = b;
    

如果您从两个 java 文件所在的同一目录中调用 javac,则不应在顶部声明包,因为它们位于“默认包”中。因此,以上应该可以工作。

使用默认包提供了一些便利,但也有一些限制,我不会详细说明,但是现在您知道了默认包,您可以查找它。我建议使用包名称,就像添加一样简单,就像你做的那样:

package kugathasan;

在每个文件的开头。如果你这样做,你应该把这两个文件放在一个名为 kugathasan 的目录中,并从包含 kugathasan 的目录中调用 javac。

【讨论】:

【参考方案2】:

这是一个包结构问题。通过查看此屏幕截图,您可能会了解它们在我的 IDE 和文件夹中的外观。

在文件夹中,它们看起来像这样。

在代码中,他们有这个包。

package com.jini;

希望您了解这是如何工作的。

【讨论】:

【参考方案3】:

如果它们在同一个目录中, 需要同时编译两个类;

javac fileA.java pair.java

【讨论】:

【参考方案4】:

技术专家的评论是正确的。

在 Java 中,开发应用程序时通常不会直接使用 .class 文件。您使用 .java 文件。您在 IDE 中创建的包应该包含您的 .java 文件。

因此,不要将 Pair.class 放在与 fileA.java 相同的包目录中,而是将 Pair.java 放在其中。然后你应该有一个包含 fileA.java 和 Pair.java 的目录/包

【讨论】:

以上是关于Java 引用同一目录中的类的主要内容,如果未能解决你的问题,请参考以下文章

JPA Hibernate 将类中的类中的字段映射到同一个表

为啥在 C++ 中的类中不需要“&”引用?

java里一个类中的方法的缺省属性是public or private?

java中哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?

如何在AJAX中调用.CS中的类

在java中怎样在有名包中引用无名包中的类