В любом файле Java, почему мы можем иметь только один открытый класс, имя которого совпадает с именем файла Java?
Почему только 1 открытый класс в файле Java
Ответ 1
Он заставляет весь Java-код организовываться определенным образом, что в конечном итоге помогает улучшить читаемость кода.
Разработчики Java выбрали строгий подход, который обеспечивает их представление о хорошей практике проектирования, и это часть этой темы. Сравните это с отношением "ничего" в Perl.
Ответ 2
Согласно этот источник, он предназначен для эффективной компиляции:
На боковой панели это объясняет, почему: "Это ограничение еще не компилятора, хотя это необходимо для эффективный импорт пакетов"
Это довольно очевидно - как и большинство вещей когда вы знаете причины дизайна - компилятор должен будет сделать дополнительный проход через все единицы компиляции (.java файлы) в выяснить, какие классы были там, и это сделает компиляцию еще медленнее.
То же самое относится и к импорту исходных файлов в IDE. Другая причина - разумные размеры источников.
Ответ 3
Это правила. Хотя это не совсем так. Вы можете определить внутренние классы внутри вас "основного" класса следующим образом:
public class A {
public class B {
...
}
}
Ответ 4
Предоставлено д-ром Хайнцем Кабуцем и его отличным информационным бюллетенем....
Почему каждый открытый класс в отдельном файл?
Это вопрос, который у меня есть. часто меня спрашивали во время моего курсы. До сих пор у меня не было хороший ответ на этот вопрос. В раздел 1, мы читаем: "Хотя каждый Дуб блок компиляции может содержать несколько классов или интерфейсов, не более класс или интерфейс на компиляцию единица может быть общедоступной".
На боковой панели это объясняет, почему: "Это ограничение еще не компилятора, хотя это необходимо для эффективный импорт пакетов"
Это довольно очевидно - как и большинство вещей когда вы знаете причины дизайна - компилятор должен будет сделать дополнительный проход через все единицы компиляции (.java файлы) в выяснить, какие классы были там, и это сделает компиляцию еще медленнее.
Ответ 5
Java использует это соглашение для поиска байт-кода класса/интерфейса, начиная с пути к классам и просматривая иерархию пакетов в подкаталогах. Представление файловой системы этой иерархии также применяет некоторые основные правила.
- Любые два класса Java или интерфейсы в том же пакете не может быть то же имя. Имена файлов конфликт.
- Любые два пакета Java в тот же родительский пакет не мог имеют одно и то же имя. Пути папок будет конфликтовать.
- Класс имеет видимость для всех классов в одном пакете без изменений к пути к классам.
Ответ 6
Мы можем иметь только один верхний уровень публичного класса или интерфейса в любом компиляторе java (исходный файл .java).
Но может быть любое количество классов/интерфейсов по умолчанию для файла src.
почему:
JLS оставляет возможность компилятора java. И большинство реализаций компилятора вынуждают иметь имя файла так же, как:
(1) имя открытого класса/интерфейса
(2) если есть основной метод и нет открытого класса, то любое имя
(3) Если есть основной метод и открытый класс, тогда основной метод должен быть в этом открытом классе
(4), если нет открытого класса и никакого основного метода, то любое допустимое имя, которое может соответствовать или не соответствовать именам класса/интерфейса в файле.
Из (2): Если допустимы два открытых класса, мы должны предоставить файлу два имени, которые ужасно бессмысленно для файловой системы. Из (3): Если допустимы два открытых класса, у нас должны быть два основных метода, которые ужасно бессмысленны для java
Следовательно, исходный файл Java может иметь только один открытый класс.
Я думаю, что приведенные выше 4 балла вынуждены компилятором сделать работу как компилятора, так и jvm, чтобы найти конкретный исходный файл java или файл класса, простой и быстрый для компиляции/загрузки/компоновки. Java имеет такие встроенные ограничения, которые разработчики должны соблюдать, чтобы иметь лучшее программирование.
Источник: Мои чтения и понимание.
Ответ 7
Он позволяет более эффективно искать исходные файлы (.java) и скомпилированные (.class) файлы во время компиляции (директива import) и более эффективную загрузку классов во время выполнения. Идея заключается в том, что, если вы знаете имя класса, вы знаете, где он должен быть найден для каждой записи пути к классу. Не требуется индексация.
Ответ 8
Я думаю, что это может быть возможной причиной. В java файле может быть только один открытый класс, потому что имя java файла такое же, как имя открытого класса. И, очевидно, мы не можем иметь файл с двумя разными именами.
Ответ 9
Чтобы иметь понимание между компилятором и программистом. Правило состоит в том, что исходный код должен иметь самый открытый публичный класс, и этот класс должен содержать основную функцию. Таким образом, без каких-либо путаницы/ограничения компилятор может получить доступ (общедоступный) класс и имя имени класса для файла класса. Так же, как этот класс содержит main(), выполнение файла класса даст правильный поток