Домашняя страница > Механизм Расширения > Создание и Используя Расширения
Понимание Загрузки Класса Расширения
Платформа расширения использует class - загружающийся механизм делегации. Когда среда выполнения должна загрузить новый class для приложения, она ищет class в следующих расположениях в порядке:
- Классы начальной загрузки: классы времени выполнения в rt.jar, классы интернационализации в i18n.jar, и другие.
- Установленные расширения: классы в файлах JAR в каталоге lib/ext JRE, и в специфичном для платформы каталоге расширения в масштабе всей системы (таких как /usr/jdk/packages/lib/ext на Операционной системе Solaris™, но примечание, которое использование этого каталога применяет только к Java™ 6 и позже).
- Путь class: классы, включая классы в файлах JAR, на путях определяются системным свойством java.class.path. Если у файла JAR на пути class есть декларация с
Class-Path
атрибут, файлы JAR, определенные Class-Path
атрибут будет искаться также. По умолчанию, java.class.path
значение свойства .
, текущий каталог. Можно изменить значение при использовании параметров командной строки -classpath ИЛИ -cp, или установку CLASSPATH
переменная окружения. Параметры командной строки переопределяют установку CLASSPATH
переменная окружения.
Список приоритета говорит Вам, например, что путь class ищется, только если class, который будет загружен, не был найден среди классов в rt.jar, i18n.jar или установленных расширениях.
Если Ваше программное обеспечение не инстанцирует своих собственных загрузчиков class для особых целей, Вы не должны действительно знать намного больше чем помнить этот список приоритета. В частности следует знать о любых конфликтах имен class, которые могли бы присутствовать. Например, если Вы перечислите class на пути class, то Вы получите неожиданные результаты, если среда выполнения вместо этого загрузит другой class того же самого имени, которое это нашло в установленном расширении.
Механизм Загрузки Класса Java
Платформа Java использует модель делегации для того, чтобы загрузить классы. Основная идея состоит в том, что у каждого загрузчика class есть "родительский" загрузчик class. Загружая class, загрузчик class первые "делегаты" поиск class к его родительскому загрузчику class прежде, чем попытаться найти class непосредственно.
Вот некоторые выделения class - загружающийся API:
- Конструкторы в java.lang.ClassLoader и его подклассах позволяют Вам определять родителя, когда Вы инстанцируете нового загрузчика class. Если Вы явно не определите родителя, система виртуальной машины, то загрузчик class будет присвоен как родитель значения по умолчанию.
- Метод loadClass в ClassLoader выполняет эти задачи, в порядке, когда вызвано, чтобы загрузить class:
- Если class был уже загружен, он возвращает это.
- Иначе, это делегирует поиск нового class к родительскому загрузчику class.
- Если родительский загрузчик class не находит class, loadClass вызывает метод findClass, чтобы найти и загрузить class.
- Метод findClass ClassLoader ищет class в текущем загрузчике class, если class не был найден родительским загрузчиком class. Вы будете, вероятно, хотеть переопределить этот метод, когда Вы инстанцируете подкласса загрузчика class в своем приложении.
- class java.net.URLClassLoader служит основным загрузчиком class для расширений и других файлов JAR, переопределяя метод findClass java.lang.ClassLoader, чтобы искать один или более указанные URL для классов и ресурсов.
Чтобы видеть пример приложения, который использует часть API, поскольку он касается файлов JAR, см. Использование связанного с JAR урока API в этом учебном руководстве.
Загрузка класса и Команда java
Платформа Java class - загружающийся механизм отражается в команде java.
- В инструменте java опция -classpath является кратким способом установить свойство java.class.path.
- Опции -cp И -classpath эквивалентны.
- Опция -jar запускает приложения, которые упаковываются в файлах JAR. Для описания и примеров этой опции, см. Рабочий урок Серийного программного обеспечения JAR в этом учебном руководстве.