2014-09-23 2 views
0

Как импортирует загрузку Java ClassLoader, например import java.util.*? Я спрашиваю, потому что у меня есть пользовательский загрузчик классов, который иногда попросят загрузить пакет вместо класса. Пример:Загружает ли ClassLoader полный пакет, когда есть подстановочный знак?

public Class<?> loadClass(String className) throws ClassNotFoundException 
{ 
    System.out.println(className); 
    return parent.loadClass(className); 
} 

Пример вывода:

org.test.model.User 
org.test.model 
org.test.model 

Таким образом, кажется, что весь пакет испрашивается (может быть из-за import org.test.model.*?) Я не уверен, что если импорт причиняет это (и как обрабатывайте его), или если все в порядке и должно быть таким образом. Заранее спасибо!

Примечание: Этот вопрос, кажется, является корень моего actual problem.

EDIT Из ответа ниже, я понимаю, что классы загружаются при ссылке и import утверждение не является то, что важно. Во всяком случае, почему загружаются пакеты (например, «org.test.model» в приведенном выше примере)? Или что такое запрос?

ответ

0

«импорт» - это просто синтаксический сахар. Когда ваш код скомпилируется в байт-код, все классы ссылаются на их полный пакет. Name

+0

Означает ли это, что для компиляции JSP тоже? – user2084865

+0

И как это объясняет запрос 'org.test.model'? – user2084865

+0

jsp работает так же – ControlAltDel

0

Дело в том, что ClassLoader не разрешает импорт, они разрешают классы лениво, поскольку они ссылаются. Они могут быть решены с нетерпением используя Class.forName(String className).

В основном, если вы используете import myclasses.unusedPackage.*, он не подходит для решения всех классов, присутствующих в пакете, но будет загружать только класс, на который он ссылается.

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