【问题标题】:Java compiler error: "public type .. must be defined in its own file"?Java编译器错误:“公共类型..必须在自己的文件中定义”?
【发布时间】:2010-11-03 03:30:41
【问题描述】:

我正在尝试编译这个:

public class DNSLookUp {
    public static void main(String[] args)   {
        InetAddress hostAddress;
        try  {
            hostAddress = InetAddress.getByName(args[0]);
            System.out.println (hostAddress.getHostAddress());
        }
        catch (UnknownHostException uhe)  {
            System.err.println("Unknown host: " + args[0]);
        }
    }
}

我使用了 javac dns.java,但我得到了一堆错误:

dns.java:1: error: The public type DNSLookUp must be defined in its own file
    public class DNSLookUp {
                 ^^^^^^^^^
dns.java:3: error: InetAddress cannot be resolved to a type
    InetAddress hostAddress;
    ^^^^^^^^^^^
dns.java:6: error: InetAddress cannot be resolved
    hostAddress = InetAddress.getByName(args[0]);
                  ^^^^^^^^^^^
dns.java:9: error: UnknownHostException cannot be resolved to a type
    catch (UnknownHostException uhe)  {
           ^^^^^^^^^^^^^^^^^^^^
4 problems (4 errors)

我以前从未编译/完成过 Java。我只需要这个来测试我的其他程序结果。有任何想法吗?我正在Linux机器上编译。

【问题讨论】:

  • 4 不是错误的“混乱”。 400 可能是,但不是 4。并且请尽量保持问题尽可能独立,我们不想在互联网上追逐,寻找您的代码,同时试图帮助您:-)
  • 对不起!我仍然需要弄清楚如何在 SO 上格式化,感谢您的编辑!
  • 为了将来参考,一行前的 4 个空格将这样格式化,您可以使用反引号内联进行相同的格式化。 This link 解释得很好。
  • 谢谢!我会读一读。 =)

标签: java compiler-errors


【解决方案1】:

该文件需要调用DNSLookUp.java,你需要把:

import java.net.InetAddress;
import java.net.UnknownHostException;    

在文件的顶部

【讨论】:

  • 谢谢!这更有意义~
  • 如果其他人想知道,文件需要重命名,因为文件名需要与类名匹配。如果我愚蠢到错过了这一点,因此错过了解决我的问题的方法,也许其他人也是。
【解决方案2】:

这里给出的答案都很好,但考虑到这些错误的性质以及“教人钓鱼等”的精神:

  1. 安装选择的 IDE(Netbeans 很容易上手)
  2. 将您的代码设置为新项目
  3. 点击出现错误的那一行的灯泡
  4. 选择您想要的修复方法
  5. 惊叹于现有工具的强大功能

【讨论】:

  • IntelliJ 有一个社区版。 jetbrains.com/idea/free_java_ide.html
  • @Jayan - 是的,当谈到丰富的 IDE 时,我们被宠坏了。我只有使用 Netbeans 和 Eclipse 的经验,虽然它们都很棒,但我认为 Netbeans 对那些刚接触这门语言的人来说会有一个更浅的学习曲线。
  • +1 用于 Netbeans。我喜欢 IntelliJ,但喜欢商业版。社区版中没有许多重要的东西。
  • 我想一旦他们看到这个答案,OP 就会在谷歌上搜索“选择 java IDE”,所以在 cmets 中讨论它可能是无关紧要的。
【解决方案3】:

将文件重命名为 DNSLookUp.java 并导入相应的类。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class DNSLookUp {

    public static void main(String[] args) {
        InetAddress hostAddress;
        try {
            hostAddress = InetAddress.getByName(args[0]);
            System.out.println(hostAddress.getHostAddress());
        } catch (UnknownHostException uhe) {
            System.err.println("Unknown host: " + args[0]);
        }
    }
}

【讨论】:

    【解决方案4】:

    您需要导入您正在使用的类。例如:

    导入 java.net.*;

    从 java.net 包中导入所有类。

    您也不能在名为 dns.java 的文件中包含公共类 DNSLookUp。看来是时候上 Java 教程了……

    【讨论】:

      【解决方案5】:

      来自标记为重复的"The public type <<classname>> must be defined in its own file" error in Eclipse

      因此,我在这里回答这个“重复”: 在 Eclipse 上,您可以在一个文件中准备所有 public classes,然后是 right-clic -&gt; Refactor -&gt; Move Type to New File。 这不是完全正确的解决方法(这不会让您在编译时在一个文件中拥有多个 public classes),但是当您准备好时,您可以在适当的文件中移动它们。

      来自 C#,这对于可忘记的(教程)类来说是一个令人讨厌的强制限制,但仍然是一个好习惯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2016-05-27
        • 2011-11-29
        相关资源
        最近更新 更多