Ошибка: класс 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);
}
}