Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | Индекс

20.14 Класс java.lang.ClassLoader

Загрузчик класса является объектом, который ответственен за загрузку классов. Учитывая имя класса, это должно попытаться определить местоположение или генерировать данные, которые составляют определение для класса. Типичная стратегия состоит в том, чтобы преобразовать имя в имя файла и затем считать "файл класса" того имени от файловой системы.

Каждый Class объект содержит ссылку на ClassLoader это определило это (§20.3.7). Всякий раз, когда исполнимый код Java должен использовать класс, который еще не был загружен, loadClass метод вызывается для загрузчика класса класса, содержащего рассматриваемый код.

Объекты класса для классов массива не создаются загрузчиками класса, но создаются автоматически как требуется Средой выполнения Java. Загрузчик класса для класса массива, как возвращено getClassLoader метод класса Class (§20.3.7), то же самое как загрузчик класса для его типа элемента; если тип элемента является типом примитива, то у класса массива нет никакого загрузчика класса.

Загрузчики класса могут обычно использоваться менеджерами безопасности (§20.17), чтобы указать на домены безопасности: два класса могут полагавший быть "дружественными" или "связанными" друг с другом, только если они были определены тем же самым загрузчиком класса.

public abstract class ClassLoader {
	protected ClassLoader() throws SecurityException;
	protected abstract Class loadClass(String name,
		      boolean resolve)
throws ClassNotFoundException; protected final Class defineClass(byte data[], int offset, int length)
throws NullPointerException, IndexOutOfBoundsException, ClassFormatError; protected final void resolveClass(Class c)
throws NullPointerException; protected final Class findSystemClass(String name)
throws ClassNotFoundException; }

20.14.1 protected ClassLoader() throws SecurityException

Этот конструктор вызывается для каждого недавно создаваемого загрузчика класса. Поскольку класс ClassLoader abstract, не возможно создать новый экземпляр класса ClassLoader непосредственно; однако, каждый конструктор для подкласса ClassLoader обязательно вызывает этого конструктора, явно или неявно, прямо или косвенно.

Весь этот конструктор делает должен осуществить проверку защиты: если есть менеджер безопасности, checkCreateClassLoader метод (§20.17.10) вызывают.

20.14.2 protected abstract Class loadClass(String name,
boolean link)
throws ClassNotFoundException

Каждый подкласс ClassLoader это не самостоятельно абстрактно, должен обеспечить реализацию метода loadClass.

Общий контракт loadClass это, данное name из класса это любой возвращается Class объект для класса или бросков a ClassNotFoundException.

Если a Class объект состоит в том, чтобы быть возвращен и link true, тогда Class объект должен быть соединен (§12.3, §20.14.4) прежде, чем он будет возвращен.

В большинстве случаев это мудро для подкласса ClassLoader (§20.14), чтобы реализовать loadClass метод как a synchronized метод.

20.14.3 protected final Class defineClass(byte data[],
int offset, int length)
throws NullPointerException, IndexOutOfBoundsException, ClassFormatError

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

Байты в массиве data в позициях offset через offset+length-1 должен иметь формат допустимого файла класса как определено Спецификацией виртуальной машины Java.

Если data null, тогда a NullPointerException бросается.

IndexOutOfBoundsException бросается, если какое-либо следующее является истиной:

Если обозначенные байты data не составляйте допустимое определение класса, тогда a ClassFormatError бросается. Иначе, этот метод создает и возвращает a Class возразите как описано по условию байтам

20.14.4 protected final void resolveClass(Class c)
throws NullPointerException

Это (обманчиво названный) метод может использоваться загрузчиком класса, чтобы соединить (§12.3, §20.14.4) класс.

Если c null, тогда a NullPointerException бросается.

Если Class объект c был уже соединен, тогда этот метод просто возвращается.

Иначе, класс соединяется как описано в §12.3.

20.14.5 protected final Class findSystemClass(String name)
throws ClassNotFoundException

Этот метод может использоваться загрузчиком класса, чтобы определить местоположение класса, у которого нет никакого загрузчика класса. Это включает встроенные классы такой как java.lang.Object, так же как классы, что реализация узла может удержать, например, локальную файловую систему.

Данный name из класса, этого метода, как loadClass метод, любой возвраты Class объект для класса или бросков a ClassNotFoundException.


Содержание | Предыдущий | Следующий | Индекс

Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com

free hit counter