57

我正在尝试编写一个程序,但我收到了这个编译器错误:

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) {
        // ...
    }
}
4

18 回答 18

87

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

  • 将您的文件从重命名Main.javaWeatherArray.java
  • 课程public class WeatherArray {重命名为public class Main {
于 2012-12-10T23:25:16.870 回答
12

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

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

于 2012-12-10T23:25:39.067 回答
5

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

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

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

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

于 2015-07-15T13:05:25.757 回答
5

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

javac Weatherarray.java

应该是什么时候

javac WeatherArray.java

于 2019-08-27T20:57:59.340 回答
1

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

于 2012-12-10T23:26:02.633 回答
1

您的文件名为Main.java它应该在哪里

WeatherArray.java

于 2012-12-10T23:27:11.353 回答
0

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

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

于 2018-07-16T04:42:07.317 回答
0

从 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
于 2020-01-09T16:37:06.333 回答
0

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

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

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

==> javac any_name_you_assign_to_file.java

现在将生成一个 WeatherArray.class。

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

==> java WeatherArray

于 2021-06-30T19:47:12.020 回答
0

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

于 2018-05-03T16:18:54.423 回答
0

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

1) You should make a new java class

您应该创建一个新的 java 类。

2) Name that class

命名该类

3) And a new java class is made

并制作了一个新的java类

于 2018-03-12T15:45:30.963 回答
0

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

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

于 2019-01-25T15:21:54.877 回答
0

编译 WeatherArray.java 而不是 Main.java

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

于 2021-07-13T13:01:10.613 回答
0

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

于 2018-01-30T22:04:51.520 回答
0

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

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

Eclipse 能够构建文件而 Gradle 不能

这可能非常令人困惑

于 2021-09-11T20:50:42.353 回答
-1

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

于 2015-06-23T20:28:23.360 回答
-1

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

于 2016-07-27T09:46:31.593 回答
-1

错误示例:

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);

  }
}
于 2017-04-12T09:06:24.660 回答