Подтвердить что ты не робот

Почему только 1 открытый класс в файле Java

В любом файле Java, почему мы можем иметь только один открытый класс, имя которого совпадает с именем файла Java?

4b9b3361

Ответ 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(), выполнение файла класса даст правильный поток