2012-03-13 4 views
9

Допустим, в классе есть некоторые операторы импорта. Когда для этого класса создается байт-код, что происходит с этими операциями импорта.Значение байта импорта: значение байта

Если операторы импорта игнорируются во время выполнения, как определяются зависимости методов этого класса во время выполнения.

+4

Почему бы не узнать об этом сами? Напишите несколько вариантов класса: один с доверием к внешним классам, который использует (например) 'java.util.List' через импорт, и тот, который полагается на« Список », но использует его полностью квалифицированным (без импорта). Затем используйте 'javap -c' для каждого и посмотрите, что получится. – yshavit

+1

В дополнение к комментарию @yshavit во время компиляции используйте 'javac -g: none Foo.java' для того, чтобы вообще не генерировать информацию об отладке (например, номера строк) в файлах' .class', а затем сравнивать сгенерированные '.class'es и они будут одинаковыми на уровне байтов, и это может быть проверено на получение хэша для каждого из них. –

ответ

9

Цель импортных заявлений - только облегчить жизнь читателям (и авторам) этого кода. Таким образом, они заменяются ссылками на полностью квалифицированные имена классов/методов в байт-коде. И неиспользуемые операторы импорта игнорируются.

1

импорта в Java это просто сокращенная

, так что если вы импортируете java.util.* вам не придется писать java.util.ArrayList в своем коде, но может написать ArrayList

1

import заявления только там компилятор с знает имена классов (или имена статических методов), вы можете получить доступ к неквалифицированному в своем коде (то есть MyClass вместо foo.bar.MyClass). За кулисами это просто используется для разрешения имен полностью квалифицированных классов, которые затем используются в байт-коде.

+1

Он используется для разрешения неквалифицированных имен * на * полностью квалифицированных имен. – EJP

+0

Вот что я имел в виду. Я не должен писать на иностранных языках, пока еще полусонно;) – Joey

Смежные вопросы