Ошибка: класс X является общедоступным, должен быть объявлен в файле с именем X.java

Я пытаюсь написать программу, но я получаю эту ошибку компилятора:

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

Ответ 1

Имя открытого класса должно совпадать с именем файла .java, в котором он находится (например, public class Foo{} должен быть помещен в файл Foo.java). Так что либо:

  • переименуйте ваш файл с Main.java на WeatherArray.java
  • переименуйте класс из public class WeatherArray { в public class Main {

Ответ 2

Имя открытого класса в файле должно быть таким же, как имя этого файла.

Поэтому, если ваш файл объявляет класс WeatherArray, его нужно называть WeatherArray.java

Ответ 3

Это происходит, когда у вас есть 1 имя для класса Java на жестком диске и другое имя класса Java в коде !!

Например, я переименовал свой класс MainActivity в MainnActivity (!) Только в коде. Я получил эту ошибку немедленно.

На вкладке "Проект" в Android Studio есть визуальный индикатор - класс внутри класса, например, вы вложенные классы, но с индикатором ошибки.

Решение состоит в том, чтобы просто переименовать имя класса на вкладке "Проект" (SHIFT + F6), чтобы совместить имя в коде Java.

Ответ 4

Вы назвали свой файл Main.java. назовите свой файл как WeatherArray.java и скомпилируйте.

Ответ 5

ваш файл называется Main.java, где он должен быть

WeatherArray.java

Ответ 6

У меня была та же проблема, но я решил ее, когда понял, что не скомпилировал ее с правильным корпусом. Возможно, вы занимались

javac Weatherarray.java

когда это должно было быть

javac WeatherArray.java

Ответ 7

Я в моем случае, я использовал syncthing. Он создал дубликат, о котором я не знал, и моя компиляция не срабатывала.

Ответ 8

Чтобы избежать этой ошибки, выполните следующие действия:

1) You should make a new java class

You should make a new java class.

2) Name that class

Name that class

3) And a new java class is made

And a new java class is made

Ответ 9

Однажды я столкнулся с такой же ошибкой. Это было действительно смешно. Я создал резервную копию файла.java с другим именем файла, но с тем же именем класса. И продолжал пытаться построить его, пока не проверил все файлы в моей папке.

Ответ 10

В моем случае (используя IntelliJ) я копирую и вставляю и переименовываю рабочее пространство, и я все еще использую старый путь для компиляции нового проекта.

В этом случае эта конкретная ошибка также произойдет, если у вас есть такая же ошибка, вы можете проверить, сделали ли вы подобные вещи.

Ответ 11

Терминал не учитывает регистр при написании "Javac [x].java", поэтому убедитесь, что то, что вы пишете в терминале, соответствует имени файла и имени класса.

Мои имя класса и имя файла были "MainClass", но я компилировал с использованием "Mainclass". Заметьте, я забыл сделать заглавную букву "с".

Ответ 12

Ответ довольно прост! Он лежит в ваших правах администратора. перед компиляцией java-кода вам нужно открыть командную строку, запустив ее как администратор. затем скомпилируйте свой код. не нужно ничего менять в коде. имя класса должно быть таким же, как имя java файла.. это!

Ответ 13

когда вы назвали ваш файл WeatherArray.java, может быть, у вас есть еще один файл на жестком диске, так что вы можете переименовать WeatherArray.java в ReWeatherArray.java, а затем переименовать ReWeatherArray.java в WeatherArray.java. все будет хорошо.

Ответ 14

пример ошибки:

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

  }
}