【问题标题】:Error: class X is public should be declared in a file named X.java错误:类 X 是公共的,应在名为 X.java 的文件中声明
【发布时间】:2012-12-10 23:22:25
【问题描述】:

我正在尝试编写程序,但出现此编译器错误:

Main.java:1: error: class WeatherArray is public, should be declared in a file named WeatherArray.java
public class WeatherArray {
       ^
1 error

我检查了我的文件名,我的公共类与我的 .java 文件相同。

我该如何解决这个问题?

这是我的代码:

public class WeatherArray {
    public static void main(String[] args) {
        // ...
    }
}

【问题讨论】:

  • 它说它试图编译Main.java 而不是WeatherArray.java
  • 我在 Mac OSX 上使用 eclipse。
  • 将源码发布到 Main.java。
  • 1.确保您的文件名尊重类名的大小写; 2.去掉所有嵌套的while循环,不然今晚我会杀了很多小猫。
  • 我可以用那些嵌套的 while 循环来配薯条吗?

标签: java


【解决方案1】:

公共类的名称必须与放置它的 .java 文件的名称匹配(如public class Foo{} 必须放在Foo.java 文件中)。所以要么:

  • 将您的文件Main.java重命名为WeatherArray.java
  • public class WeatherArray {重命名为public class Main {

【讨论】:

  • Main.java 在文件结构中的位置?
  • 如果您没有public class Main,则没有Main.java。不要将主类与main 方法混淆。你的main 方法在WeatherArray.java 中。另外,我认为您的嵌套 while 应该是连续的 if 语句。
  • 好的,谢谢你帮了大忙。我会坚决删除所有嵌套的 while 循环。
  • 它也可以通过删除public 来使该类不公开(但如果您尝试使用不同包中的类,这会导致一些问题)。
【解决方案2】:

文件中公共类的名称必须与该文件的名称相同。

因此,如果您的文件声明了 WeatherArray 类,则需要将其命名为 WeatherArray.java

【讨论】:

    【解决方案3】:

    当您在硬盘上有一个 Java 类的名称而代码中有另一个 Java 类的名称时,就会发生这种情况!!

    例如,我在代码中仅将 MainActivity 类重命名为 MainnActivity (!)。我立即收到此错误。

    在 Android Studio 的 Project 选项卡中还有一个视觉指示器 - 类中的一个类,就像您嵌套了 classed,但带有一个错误指示器。

    解决方案是在“项目”选项卡中简单地重命名类名称 (SHIFT + F6) 以匹配 Java 代码中的名称。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,但当我意识到我没有使用正确的大小写编译它时解决了它。你可能一直在做

      javac Weatherarray.java

      应该是什么时候

      javac WeatherArray.java

      【讨论】:

        【解决方案5】:

        您将文件命名为 Main.java。将您的文件命名为 WeatherArray.java 并编译。

        【讨论】:

          【解决方案6】:

          你的文件被命名为 Main.java 它应该在哪里

          WeatherArray.java

          【讨论】:

            【解决方案7】:

            我的情况是,我使用的是 syncthing。它创建了一个我不知道的副本,并且我的编译失败了。

            【讨论】:

              【解决方案8】:

              为避免此错误,您应遵循以下步骤:

              1) You should make a new java class
              

              2) Name that class
              

              3) And a new java class is made
              

              【讨论】:

                【解决方案9】:

                我曾经遇到过同样的错误。这真的很有趣。我创建了具有不同文件名但类名相同的 .java 文件的备份。并继续尝试构建它,直到我检查了文件夹中的所有文件。

                【讨论】:

                  【解决方案10】:

                  在我的情况下(使用 IntelliJ)我复制并粘贴并重命名了工作区,我仍然使用旧路径来编译新项目。

                  在这种情况下,这个特定的错误也会发生,如果你有同样的错误,你可以检查你是否做了类似的事情。

                  【讨论】:

                    【解决方案11】:

                    终端在写入“Javac [x].java”时不区分大小写,因此请确保您在终端中写入的内容与文件名和类名匹配。

                    我的类名和文件名都是“MainClass”,但我正在使用“Mainclass”进行编译。注意我忘了把“c”大写。

                    【讨论】:

                      【解决方案12】:

                      从 Ubuntu 命令行:

                      //WeatherArray.java
                      public class WeatherArray {
                        public static void main(String[] args) {
                          System.out.println("....Hello World");
                      }}
                      

                      ls

                      WeatherArray.java

                      javac WeatherArray.java

                      ls

                      WeatherArray.java WeatherArray.class

                      java 天气数组

                      ....你好世界

                      当然,如果你用不同于 WeatherArray 的名称命名你的 java 文件,你需要取出 public,它会是:

                      // Sunny.java
                      class WeatherArray {
                         public static void main(String[] args) {
                            System.out.println("....Hello World"); }}
                      // javac Sunny.java; java WeatherArray
                      

                      【讨论】:

                        【解决方案13】:

                        如果您将 WeatherArray 类从公共设置为默认。

                        公共类 WeatherArray =====> 类 WeatherArray

                        那么您不会收到任何错误,并且 您只需编写代码即可轻松编译代码

                        ==> javac any_name_you_assign_to_file.java

                        现在将生成一个 WeatherArray.class。

                        要运行您的代码,您必须使用类名

                        ==> java WeatherArray

                        【讨论】:

                          【解决方案14】:

                          编译 WeatherArray.java 而不是 Main.java

                          如果您没有使用与公共类名称相同的名称保存源代码,则会出现此错误。

                          【讨论】:

                            【解决方案15】:

                            如果您的类名与文件名相同,请检查它是否不包含任何零宽度字符

                            我不小心复制了一个带有不可见空格的类名,导致了这个异常

                            Eclipse 能够构建文件而 Gradle 不能

                            这可能非常令人困惑

                            【讨论】:

                              【解决方案16】:

                              答案很简单。它取决于您的管理员权限。在编译您的 java 代码之前,您需要以管理员身份运行打开命令提示符。然后编译你的代码。无需更改代码中的任何内容。类的名称需要与java文件的名称相同..就是这样!!

                              【讨论】:

                              • 缺乏管理员权限似乎不太可能导致此错误。
                              【解决方案17】:

                              错误示例:

                              public class MaainActivity extends Activity {
                              
                                @Override
                                public void onCreate(Bundle savedInstanceState) {
                                  super.onCreate(savedInstanceState);
                                  // Get the view from activity_main.xml
                                  setContentView(R.layout.activity_main);
                              
                                }
                              }
                              

                              正确的例子:只要确保你写了正确的活动名称,即“主要活动”

                              public class MainActivity extends Activity {
                              
                              
                                @Override
                                public void onCreate(Bundle savedInstanceState) {
                                  super.onCreate(savedInstanceState);
                                  // Get the view from activity_main.xml
                                  setContentView(R.layout.activity_main);
                              
                                }
                              }
                              

                              【讨论】:

                              • 这似乎没有在 2-5 年前发布的 5 个答案中添加任何内容,说类名需要与文件名匹配,尤其是 one of them,它已经提到了类中的拼写错误名字。
                              【解决方案18】:

                              当您将文件命名为 WeatherArray.java 时,可能您的硬盘上有另一个文件,因此您可以将 WeatherArray.java 重命名为 ReWeatherArray.java,然后将 ReWeatherArray.java 重命名为 WeatherArray.java。会好的。

                              【讨论】:

                              • 其实是评论
                              • 如果有另一个同名文件,它可能会覆盖它或给出其他错误。如果您正在尝试编译新文件,则只需要其他答案中给出的建议 - 只需重命名文件或类,如果有另一个文件阻止重命名它,您显然需要先将其移开。
                              猜你喜欢
                              • 2015-08-31
                              • 2014-10-24
                              • 1970-01-01
                              • 2020-04-13
                              • 1970-01-01
                              • 2020-12-27
                              • 2021-05-16
                              • 1970-01-01
                              相关资源
                              最近更新 更多