Java: оператор импорта и полное имя?

18

Я пробовал найти ответ на это как в Интернете, так и в своем собственном наборе знаний, но я не могу найти окончательного четкого ответа.

Предположим, что я использую только один класс из другого пакета только один раз, который нужно импортировать, например myPack.anotherPackage.ClassName .

В чем разница, если таковая имеется, между использованием оператора импорта :

import myPack.anotherPackage.ClassName;

, используя полное имя :

myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName();

?

Очевидно, что этот вопрос применяется только в том случае, если ClassName используется только один раз.

    
задан Jonathan Pitre 10.08.2012 в 20:28
источник
  • выглядит как дубликат stackoverflow.com/questions/5125404/... –  Aaron Kurtzhals 10.08.2012 в 20:34
  • @ АаронКуртжалы На самом деле. Вопрос, который вы указали, задал вопрос об эффективности использования операторов импорта, в то время как этот вопрос больше связан с различием между использованием импорта и использованием квалифицированного имени. Ответы будут разными. –  Jonathan Pitre 10.08.2012 в 20:36
  • Какую дополнительную информацию вы ищете, которая не подпадает под принятый ответ aioobe в вопросе, с которым я связан? –  Aaron Kurtzhals 10.08.2012 в 20:45

7 ответов

16

Операторы импорта делают ваш код более удобочитаемым , так как вы не загромождаете код полным пакетом.

Если существует конфликт ClassNames , тогда только в этом случае рекомендуется использовать для полные имена .

    
ответ дан sundar 10.08.2012 в 20:31
источник
8

Нет, на мой взгляд. Посмотрите на байт-код - разницы не будет.

 javap -c <your class>
    
ответ дан Eugene 10.08.2012 в 20:30
источник
  • А как насчет компиляции? Есть ли разница? –  Jonathan Pitre 10.08.2012 в 20:31
  • @NathanSabruka нет, что я знаю –  Eugene 10.08.2012 в 20:32
3

1. Больше о значении readability , чем значения functional .

Оператор

2. import предоставляет cleaner code , чем использование полного имени пакета вместе с именем class или interface .

3. Но вы должны заботиться о импортировании пакетов, которые неоднозначны.

  'java.awt.List' and 'java.util.List'

Затем вам нужно импортировать один полный и один с полным именем пакета, например ниже

import java.util.List;

and 

java.awt.List l = new java.awt.List();
    
ответ дан Kumar Vivek Mitra 10.08.2012 в 20:47
источник
0

От моих знаний нет разницы. Единственное различие заключается в многословии вашего кода. Как правило, чем сложнее читать, тем сложнее читать. Возможно, смотрит на байт-код?

    
ответ дан RNJ 10.08.2012 в 20:31
источник
0

Нет никакой реальной разницы, особенно для конкретного конкретного случая, приведенного здесь. См. Java: используйте импорт или явное имя пакета / класса?     

ответ дан Gabe Correa 10.08.2012 в 20:41
источник
0

После компиляции кода нет никакой разницы. В обоих случаях байт-код будет иметь полные имена, т. Е. Имена классов автоматически заменяются квалифицированными именами компилятором. Это просто, чтобы сделать жизнь программистов легкой, где нам не нужно писать полное имя для обозначения класса.

    
ответ дан RamKr 04.06.2014 в 07:27
источник
0

Импорт и пакет используются для защиты имен и доступа (по умолчанию) Простой причиной этого может быть много классов с одинаковым именем.

Чтобы различать их, мы должны разделить их по пакетам и импортировать их, когда это необходимо.

Нет никакой разницы в импорте класса или при прямом вводе полного имени, однако есть некоторые небольшие отличия.  1. Самое главное, если вы импортируете все классы в пакет (т. Е. Import xyz. *;) Классы могут по-прежнему иметь проблемы с именами, например, если есть несколько общих импортов, вы можете использовать неправильный класс во время выполнения.

  1. В случае динамической загрузки классов во время выполнения, например, при регистрации драйвера JDBC во время выполнения, вам необходимо предоставить полное квалифицированное имя класса как параметр, чтобы его можно было динамически загружать.

В целом используйте следующую передовую практику:  1. Никогда не используйте import abc. *; формат импорта и всегда импортировать отдельные классы (eclipse или некоторые IDE могут автоматически корректировать импорт в * и должны отключить это)  2. Вы должны использовать полное имя класса, когда вы уже импортировали класс с таким же именем и хотите использовать другой класс с тем же именем в той же программе.  3. Надеюсь, это поможет:)

    
ответ дан amitmah 24.01.2018 в 01:28
источник