Package java.lang.classfile.constantpool
Предоставляет интерфейсы для описания записей пула констант библиотеки java.lang.classfile.
Пакет java.lang.classfile.constantpool содержит интерфейсы для описания записей пула констант в формате файла class. Записи пула констант — это низкоуровневые модели, точно представляющие структуру файла class. API этого пакета выполняют проверку аргументов на null и непредставимые значения, если не указано иное.
Чтение записей пула констант
При чтении файловclass записи пула загружаются отложенно; содержимое этих записей, помимо их базовой структуры, не анализируется, чтобы ускорить разбор. Содержимое записей, представляющих интерес для пользователей, обычно доступных через другие модели и элементы, считывается по требованию. Например, для поиска методов сначала следует отфильтровать их по флагам доступа, а затем по имени метода, и использовать Utf8Entry.equalsString(String) вместо проверки равенства с Utf8Entry.stringValue(). Это позволяет свести к минимуму загрузку записей UTF-8: boolean isStaticWorkMethod(MethodModel method) {
// check static flag first to avoid unnecessary evaluation of UTF-8 entry
return (method.flags().flagsMask() & ClassFile.ACC_STATIC) != 0
// use equalsString to avoid full conversion to String for comparison
// the Utf8Entry can also act as a basic CharSequence without full conversion
&& method.methodName().equalsString("work");
}
Записи также предоставляют средства доступа к проверенной символьной информации с номинальными абстракциями дескрипторов из пакета java.lang.constant. Эти средства доступа к символьной информации проверяют данные в считанных файлах class и выбрасывают исключение IllegalArgumentException, если доступная запись пула констант содержит недопустимые данные. Номинальные дескрипторы представляют проверенные данные, избавляя пользователей от дополнительных проверок при дальнейшей обработке.
Из-за отложенного характера разбора файлов class исключение IllegalArgumentException, указывающее на повреждённые данные файла class, может быть выброшено при вызове любого метода. Например, исключение может возникнуть при первом чтении ClassEntry из пула констант (из-за недопустимого индекса или неверного типа записи), при раскрытии связанной с ней записи UTF-8 (из-за повреждённых данных UTF-8) или при обращении к символьной информации (если строка недопустима для записи класса).
Запись элементов пула констант
Как правило, при записи файлов
class пользователям не нужно беспокоиться о работе с пулом констант и его записями. Большинство моделей и элементов Class-File API имеют два набора фабричных методов: один принимает символьную информацию, представляющую используемые элементы, а другой — записи пула констант. Построитель пула констант, связанный с построителями файлов class, ClassFileBuilder.constantPool(), автоматически создаёт записи пула на основе символьной информации или повторно использует уже существующие. Проверенные данные в символьной информации упрощают создание файлов class, позволяя избежать избыточного разбора необработанных данных записей пула констант. Разумеется, пользователи могут использовать фабричные методы, принимающие записи пула констант, если записи уже имеются у них или если им нужен более точный контроль над созданием файлов class.
Если при построении класса повторно используется множество моделей и элементов из другого ClassModel, процесс построения может использовать построитель пула констант, расширяющий указанный ClassModel. Такой построитель доступен через ConstantPoolBuilder::of(ClassModel) и позволяет пакетно копировать байтовые данные со ссылками на пул констант, ускоряя построение класса. Это особенно актуально для преобразования классов; управлять таким поведением позволяет ConstantPoolSharingOption.
- См. Спецификацию виртуальной машины Java:
- 4.4 Пул констант
- Начиная с версии:
- 24
| Класс | Описание |
|---|---|
| AnnotationConstantValueEntry | Маркерный интерфейс для записей пула констант, представляющих константные значения, связанные с элементами аннотаций. |
| ClassEntry | Моделирует структуру CONSTANT_Class_info, представляющую ссылочный тип в пуле констант файла class. |
| ConstantDynamicEntry | Моделирует структуру CONSTANT_Dynamic_info, представляющую динамически вычисляемую константу в пуле констант файла
class. |
| ConstantPool | Предоставляет доступ для чтения к пулу констант и таблице методов начальной загрузки файла class. |
| ConstantPoolBuilder | Построитель пула констант файла class. |
| ConstantPoolException | Выбрасывается, если запрошенную запись не удаётся получить из пула констант или таблицы методов начальной загрузки. |
| ConstantValueEntry | Маркерный интерфейс для записей пула констант, представляющих константные значения в атрибуте ConstantValue. |
| DoubleEntry | Моделирует структуру CONSTANT_Double_info, представляющую константу
double в пуле констант файла class. |
| DynamicConstantPoolEntry | Суперинтерфейс, моделирующий динамически вычисляемые записи пула констант, включая ConstantDynamicEntry и InvokeDynamicEntry, в пуле констант файла class. |
| FieldRefEntry | Моделирует структуру CONSTANT_Fieldref_info или символьную ссылку на поле в пуле констант файла class. |
| FloatEntry | Моделирует структуру CONSTANT_Float_info или константу float в пуле констант файла class. |
| IntegerEntry | Моделирует структуру CONSTANT_Integer_info или константу int в пуле констант файла class. |
| InterfaceMethodRefEntry | Моделирует структуру CONSTANT_InterfaceMethodRef_info или символьную ссылку на метод интерфейса в пуле констант файла class. |
| InvokeDynamicEntry | Моделирует структуру CONSTANT_InvokeDynamic_info или символьную ссылку на динамически вычисляемую точку вызова в пуле констант файла class. |
| LoadableConstantEntry | Маркерный интерфейс для записей пула констант, которые можно загрузить с помощью инструкций ldc. |
| LongEntry | Моделирует структуру CONSTANT_Long_info или константу long в пуле констант файла class. |
| MemberRefEntry | Суперинтерфейс, моделирующий символьные ссылки на член класса или интерфейса в пуле констант файла class, включая ссылки на поля, методы класса и методы интерфейса. |
| MethodHandleEntry | Моделирует структуру CONSTANT_MethodHandle_info или символьную ссылку на дескриптор метода в пуле констант файла class. |
| MethodRefEntry | Моделирует структуру CONSTANT_MethodRef_info или символьную ссылку на метод класса в пуле констант файла class. |
| MethodTypeEntry | Моделирует структуру CONSTANT_MethodType_info или символьную ссылку на тип метода в пуле констант файла class. |
| ModuleEntry | Моделирует структуру CONSTANT_Module_info, обозначающую модуль в пуле констант файла class. |
| NameAndTypeEntry | Моделирует структуру CONSTANT_NameAndType_info, представляющую поле или метод в пуле констант файла class. |
| PackageEntry | Моделирует CONSTANT_Package_info, представляющую пакет в пуле констант файла class. |
| PoolEntry | Моделирует запись в пуле констант файла class. |
| StringEntry | Моделирует структуру CONSTANT_String_info или строковую константу в пуле констант файла class. |
| Utf8Entry | Моделирует константу CONSTANT_UTF8_info, представляющую строки в пуле констант файла class. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.