Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
• ClassLoader - загрузчик классов; отвечает за загрузку описания классов в память JVM;
• SecurityManager - менеджер безопасности; содержит различные методы проверки допустимости запрашиваемой операции;
• System - содержит набор полезных статических полей и методов;
• Runtime - позволяет приложению взаимодействовать со средой исполнения;
• Process - представляет интерфейс для взаимодействия с внешней программой, запущенной при помощи Runtime.
ClassLoader
Это абстрактный класс, ответственный за загрузку типов. По имени класса или интерфейса он находит и загружает в память данные, которые составляют определение типа. Обычно для этого используется простое правило: название типа преобразуется в название class-файла, из которого и считывается вся необходимая информация.
Каждый объект Class содержит ссылку на объект ClassLoader, с помощью которого он был загружен.
Для добавления альтернативного способа загрузки классов можно реализовать свой загрузчик, унаследовав его от ClassLoader. Например, описание класса может загружаться через сетевое соединение. Метод defineClass() преобразует массив байт в экземпляр класса Class. С помощью метода newlnstance() могут быть получены экземпляры такого класса. В результате загруженный класс становится полноценной частью исполняемого Java-предложения.
Для иллюстрации приведем пример, как может выглядеть простая реализация загрузчика классов, использующего сетевое соединение:
class NetworkClassLoader extends ClassLoader { String host; int port;
public NetworkClassLoader(String host, int port) { this.host = host; this.port = port;
}
public Class findClass(String className) { byte[] bytes = loadClassData(className); return defineClass(className, bytes, 0, bytes.length)
}
private byte[] loadClassData(String className) { byte[] result = null;
// open connection, load the class data return result;
}
}
В этом примере только показано, что наследник загрузчика классов должен определить и реализовать методы findClass() и loadClassData() для загрузки описания класса. Когда описание получено, массив байт передается в метод defineClass() для создания экземпляра Class. Для простоты в примере приведен только шаблонный код, без реализации получения байт из сетевого соединения.