Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Экземпляры нового класса создаются с помощью метода newinstance класса Class. Если метод созданного класса



Ссылается на другие классы, виртуальная машина вызывает метод loadClass его загрузчика, передавая ему имя

Запрашиваемого класса. При создании экземпляра класса или вызове

Любого из его методов потребуется также загрузка его предка и других используемых им классов, за это

Отвечает функция resolveClass.

Примерная реализация класса NetworkClassLoader может выглядеть следующим образом:

class NetworkClassLoader {

String host; int port;

Hashtable cache = new Hashtable();

NetworkClassLoader(String aHost, int aPort)

{

host = aHost; port = aPort; }

private byte loadCiassData(String name)[]

{

// собственно загрузка класса

}

Public synchronized Class loadClass(String name, boolean resolve)

{

Class с = cache.get(name);

// Хэш-таблица используется для исключения

if (с == null)

// повторной загрузки класса

{

// и формирования пространства имен byte data[] =

LoadClassData(name);

c=defineClass(data, 0, data.length);

Cache, put(name, c);

}

If (resolve)

resolveClass(c):

Return c;

}

}

ClassLoader loader = new NetworkClassLoader(host, port);

Object main = loader.loadClass("Main", true).newlnstance();

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

Лишь не обнаружив там запрашиваемого класса, продолжить поиск по пространству имен ссылающегося класса,





Дата публикования: 2014-11-04; Прочитано: 297 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...