"Публичный тип <<classname>> должен быть определен в собственном файле" ошибка в Eclipse
Я написал следующий код:
package staticshow;
public class StaticDemo {
static int a = 3;
static int b = 4;
static {
System.out.println("Voila! Static block put into action");
}
static void show() {
System.out.println("a= " + a);
System.out.println("b= " + b);
}
}
public class StaticDemoShow {
public static void main() {
StaticDemo.show();
}
}
Я получаю сообщение об ошибке:
The public type StaticDemo must be defined in its own file
в самой первой строке public class StaticDemo {
. Почему это происходит и как я могу это решить? Обратите внимание, что мое имя проекта StaticDemoShow
, имя пакета staticshow
, а имена классов указаны в коде.
EDIT. После создания только одного класса или обоих классов по умолчанию я получаю сообщение об ошибке "Выбор не содержит основного типа". Теперь что мне делать?
Ответы
Ответ 1
Мы не можем иметь два открытых класса в одном файле. JVM не может понять, в одном файле мы должны написать только один открытый класс.
public class StaticDemo {
static int a = 3;
static int b = 4;
static {
System.out.println("Voila! Static block put into action");
}
static void show() {
System.out.println("a= " + a);
System.out.println("b= " + b);
}
}
class StaticDemoShow {
public static void main() {
StaticDemo.show();
}
}
Ответ 2
Cant имеет два открытых класса в одном файле
public class StaticDemo{
Изменить на
class StaticDemo{
Ответ 3
Правило Java: один класс public
в одном файле.
Ответ 4
Сохраните этот класс в файле StaticDemo.java.
Также вы не можете иметь более одного открытого класса в одном файле.
Ответ 5
Вы не можете использовать 2 экземпляра общедоступного класса, вы должны использовать их. Попробуйте использовать класс (имя) вместо открытого класса (имя)
Ответ 6
ошибка в первой строке открытого класса StaticDemo {
Любой класс A
, имеющий модификатор доступа как public
, должен иметь отдельный исходный файл как A.java
или A.jav
. Это указано в разделе JLS 7.6:
Если и только если пакеты хранятся в файловой системе (§7.2), хост система может выбрать принуждение к ограничению времени компиляции если тип не найден в файле под именем, состоящим из имя типа плюс расширение (например,.java или .jav), если любой из верно следующее:
-
Тип упоминается кодом в других единицах компиляции пакета, в котором объявлен тип.
-
Тип объявляется общедоступным (и, следовательно, потенциально доступен из кода в других пакетах).
Однако вам, возможно, придется удалить модификатор доступа public
из объявления класса StaticDemo
. Тогда как StaticDemo
класс не будет иметь модификатора, он станет private-package, т.е. Он будет виден только в пределах его собственного пакета.
Отъезд Контроль доступа к членам класса
Ответ 7
У вас может быть только один открытый класс в файле, и вы получите сообщение об ошибке, которое вы получаете сейчас, а имя файла должно быть именем открытого класса
Ответ 8
У меня были две значительные ошибки в моей программе. Из других ответов, которые я узнал в одной программе Java, нельзя объявить два класса "общедоступными". Поэтому я изменил спецификатор доступа, но получил еще одну ошибку, добавленную в мой вопрос как "EDIT", что "Выбор не содержит основного типа". Наконец, я заметил, что забыл добавить часть "String args []" в мой основной метод. Вот почему код не работал. После исправления он работал, как ожидалось.