Java: доступ к классу в пакете, что является лучшим способом? - PullRequest
12 голосов
/ 20 марта 2011

Если я получаю доступ к классу в пакете, используя полное имя, не импортируя его, сохраняет ли он какую-либо память?

Используя полное имя класса:

java.lang.Math.sqrt(x);

Импортировать пакет:

import java.lang.Math;

Math.sqrt(x);

Какой способ лучше: импортировать пакет или получить доступ, используя полное имя?

Благодарю вас ..

Ответы [ 5 ]

10 голосов
/ 20 марта 2011

Нет разницы в производительности между импортом пакета или использованием полного имени класса. Директива import не преобразуется в байт-код Java, следовательно, не влияет на производительность во время выполнения. Разница лишь в том, что это экономит ваше время, если вы используете импортированный класс несколько раз. Это хорошее чтение здесь

7 голосов
/ 20 марта 2011

Нет, это не экономит вашу память.

Также обратите внимание, что вам вообще не нужно импортировать Math.Все в java.lang импортируется автоматически.

Лучшим примером будет что-то вроде ArrayList

import java.util.ArrayList;
....
ArrayList<String> i = new ArrayList<String>();

Примечание. Я импортирую ArrayList специально.Я мог бы сделать

import java.util.*; 

Но вы, как правило, хотите избегать большого подстановочного импорта, чтобы избежать проблемы коллизий между пакетами.

4 голосов
/ 20 марта 2011

Они эквивалентны.Доступ такой же.

Импорт - это просто соглашение, которое избавляет вас от необходимости каждый раз вводить полностью разрешенное имя класса.Вы можете написать всю свою Java без использования импорта, если вы быстро работаете на прикосновении.

Но нет никакой разницы в эффективности или загрузке классов.

2 голосов
/ 20 марта 2011

Как уже говорилось, во время выполнения нет никакой разницы (в файле класса он всегда полностью квалифицирован, а после загрузки и связывания класса есть прямые указатели на указанный метод), и все в пакете java.lang автоматически импортируется, как и все в текущем пакете.

Компилятору может потребоваться поискать несколько микросекунд дольше, но это не должно быть причиной - решите вопрос разборчивости для читателей-людей.

Кстати, если вы используете много статических методов (например, Math), вы также можете написать

import static java.lang.Math.*;

и затем используйте

sqrt(x)

непосредственно. Но делайте это только в том случае, если ваш класс тяжелый по математике, и это действительно помогает удобочитаемости больших формул, поскольку читатель (как компилятор) сначала будет искать в том же классе и, возможно, в суперклассах. (Это относится аналогично для других статических методов и статических переменных (или констант) тоже.)

0 голосов
/ 20 марта 2011

Пакет импорта для лучшей читаемости;

Полностью квалифицированный класс должен использоваться в специальных сценариях.Например, одно и то же имя класса в другом пакете или используйте отражение, например Class.forName().

...