Нет хитов о производительности. Это влияет только на то, как компилятор разрешает типы; нет никаких последствий для генерируемого кода байта или информации, доступной во время выполнения. Он почти точно эквивалентен using [namespace]
в C++ (где пакеты похожи на пространства имен).
Как и C++, вы также можете полностью квалифицировать тип с его пакетом вместо его импорта.
C++:
Something::Whatever x = ...;
// or
using namespace Something;
Whatever x = ...;
Java:
com.something.Whatever x = ...;
// or
import com.something.*;
Whatever x = ...;
Вы можете (и должны) также импортировать определенный тип:
C++:
using Something::Whatever;
Java:
import com.something.Whatever;
Как и в случае с C++, классы в одном пакете могут ссылаться друг на друга без необходимости присвоить имя пакета.
Обратите внимание, что в отличие от C++ using namespace
, import
должен быть в верхней части файла. Кроме того, имена пакетов напрямую отражают структуру каталогов источника относительно пути к классам (разделители путей заменяются точками); потому что классы могут динамически загружаться в Java, имя пакета также указывает, где в файловой системе класс загрузчик ищет класс.
Кроме того, чтобы выбрать гниды, в C. такой концепции нет.
Вы упомянули, что способ импорта в C/C++ отличается от Java. Это я уже знаю – UnderDog
При декомпилировании байтового кода нет способа определить, что такое импорт. Единственный след, который они оставляют, - это номера строк немного выше, что также не влияет на производительность. –
Что многие разработчики из C/C++ находят, что сначала нарушают Java, так это то, что производительность не является чем-то, о чем вам нужно беспокоиться, так как б) это то, что вам нужно только измерить в запущенной программе, прежде чем принимать решение, c) не может сделать а если окажется, что есть проблема (что редко, но разочаровывает), то Java лучше понять как язык (хотя JVM очень сложный) и убрать многие из общих проблем, которые вы могли бы волноваться о языках на более низком уровне. –