Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
Работа
Загрузкаreference
от массива
Формат
aaload
Формы
aaload = 50 (0x32)
Стек операнда
..., arrayref, индекс..., значение
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типreference
. Индекс должен иметь типint
. И arrayref и индекс выталкиваются от стека операнда.reference
значение в компоненте массива по индексу получается и продвигается на стек операнда.
Исключения на этапе выполнения
Если arrayrefnull
, aaload бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, aaload инструкция бросаетArrayIndex
OutOfBoundsException
.
Работа
Хранилище вreference
массив
Формат
aastore
Формы
aastore = 83 (0x53)
Стек операнда
..., arrayref, индекс, оценивают...
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типreference
. Индекс должен иметь типint
и значение должно иметь типreference
. arrayref, индекс, и значение выталкиваются от стека операнда.reference
значение сохранено как компонент массива по индексу.
Тип имеющий значение должен быть присвоением, совместимым (§2.6.7) с типом компонентов массива, на который ссылается arrayref. Присвоение значения ссылочного типа S (источник) к переменной ссылочного типа T (цель) позволяется только, когда тип S поддерживает все операции, определенные на типе T. Подробные правила следуют:
[]
, то есть, массив компонентов SC типа, тогда:
Исключения на этапе выполнения
Если arrayrefnull
, aastore бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, aastore инструкция бросает ArrayIndexOutOfBoundsException
.
Иначе, если arrayref неnull
и фактический тип имеющий значение не является присвоением, совместимым (§2.6.7) с фактическим типом компонентов массива, aastore бросаетArrayStoreException
.
Работа
Продвинутьnull
Формат
aconst_null
Формы
aconst_null = 1 (0x1)
Стек операнда
......, нуль
Описание
Продвиньтеnull
объектreference
на стек операнда.
Примечания
Виртуальная машина Java не передает под мандат конкретное значение для null
.
Работа
Загрузкаreference
от локальной переменной
Формат
aload индекс
Формы
aload = 25 (0x19)
Стек операнда
......, objectref
Описание
Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Локальная переменная по индексу должна содержать a reference
. objectref в локальной переменной по индексу продвигается на стек операнда.
Примечания
aload инструкция не может использоваться, чтобы загрузить значение типа returnAddress
от локальной переменной на стек операнда. Эта асимметрия с astore инструкцией является намеренной.
aload код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Загрузкаreference
от локальной переменной
Формат
aload _ <n>
Формы
aload_0 = 42 (0x2a) aload_1 = 43 (0x2b) aload_2 = 44 (0x2c) aload_3 = 45 (0x2d)
Стек операнда
......, objectref
Описание
<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). Локальная переменная в <n> должна содержать a reference
. objectref в локальной переменной по индексу продвигается на стек операнда.
Примечания
aload _ <n> инструкция не может использоваться, чтобы загрузить значение типа returnAddress
от локальной переменной на стек операнда. Эта асимметрия с соответствующим astore _ <n> инструкция является намеренной. Каждый из aload _ <n> инструкции является тем же самым как aload с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Создайте новый массивreference
Формат
anewarray indexbyte1 indexbyte2
Формы
anewarray = 189 (0xbd)
Стек операнда
..., количество..., arrayref
Описание
Количество должно иметь типint
. Это выталкивается от стека операнда. Количество представляет число компонентов массива, чтобы быть созданным. indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по тому индексу должен быть символьной ссылкой на класс, массив, или интерфейсный тип. Именованный класс, массив, или интерфейсный тип разрешаются (§5.4.3.1). Новый массив с компонентами того типа, количества длины, выделяется от собранной "мусор" "кучи", и areference
arrayref к этому новому объекту массива продвигается на стек операнда. Все компоненты нового массива инициализируются кnull
, значение по умолчанию дляreference
типы (§2.5.1).
Соединение Исключений
Во время разрешения символьной ссылки на класс, массив, или интерфейсный тип, может быть выдано любое из исключений, задокументированных в §5.4.3.1.
Исключение на этапе выполнения
Иначе, если количество является меньше чем нуль, anewarray инструкция бросает a NegativeArraySizeException
.
Примечания
anewarray инструкция используется, чтобы создать единственную размерность массива ссылок на объект или части многомерного массива.
Работа
Возвратитьсяreference
от метода
Формат
areturn
Формы
areturn = 176 (0xb0)
Стек операнда
..., objectref [пустой]
Описание
objectref должен иметь типreference
и должен обратиться к объекту типа, который является присвоением, совместимым (§2.6.7) с типом, представленным дескриптором возврата (§4.3.3) текущего метода. Если текущий метод является asynchronized
метод, монитор, полученный или повторно введенный на вызове метода, выпускается или выходится (соответственно) как будто выполнением monitorexit инструкции. Если никакое исключение не выдается, objectref выталкивается от стека операнда текущего фрейма (§3.6) и продвигается на стек операнда фрейма invoker. Любые другие значения на стеке операнда текущего метода отбрасываются.
Интерпретатор тогда восстанавливает фрейм invoker и возвращает управление invoker.
Исключения на этапе выполнения
Если текущий метод является asynchronized
метод и текущий поток не являются владельцем монитора, полученного или повторно введенного на вызове метода, areturn бросаетIllegalMonitorStateException
. Это может произойти, например, если asynchronized
метод содержит monitorexit инструкцию, но никакую monitorenter инструкцию, на объекте, на котором синхронизируется метод.
Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в §8.13 и если первое из тех правил нарушается во время вызова текущего метода, то areturn бросает IllegalMonitorStateException
.
Работа
Получите длину массива
Формат
arraylength
Формы
arraylength = 190 (0xbe)
Стек операнда
..., arrayref..., длина
Описание
arrayref должен иметь типreference
и должен обратиться к массиву. Это выталкивается от стека операнда. Длина массива, на который это ссылается, определяется. Та длина продвигается на стек операнда какint
.
Исключение на этапе выполнения
Если arrayrefnull
, arraylength инструкция бросает aNullPointerException
.
Работа
Хранилищеreference
в локальную переменную
Формат
astore индекс
Формы
astore = 58 (0x3a)
Стек операнда
..., objectref...
Описание
Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). objectref на вершине стека операнда должен иметь типreturnAddress
или типаreference
. Это выталкивается от стека операнда, и значение локальной переменной по индексу устанавливается в objectref.
Примечания
astore инструкция используется с objectref типаreturn
Address
реализовываяfinally
пункты языка программирования Java (см. Раздел 7.13, "Компилируяfinally
"). aload инструкция не может использоваться, чтобы загрузить значение типаreturnAddress
от локальной переменной на стек операнда. Эта асимметрия с astore инструкцией является намеренной.
astore код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Хранилищеreference
в локальную переменную
Формат
astore _ <n>
Формы
astore_0 = 75 (0x4b) astore_1 = 76 (0x4c) astore_2 = 77 (0x4d) astore_3 = 78 (0x4e)
Стек операнда
..., objectref...
Описание
<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). objectref на вершине стека операнда должен иметь типreturnAddress
или типаreference
. Это выталкивается от стека операнда, и значение локальной переменной в <n> устанавливается в objectref.
Примечания
astore _ <n> инструкция используется с objectref типаreturnAddress
реализовываяfinally
пункты языка программирования Java (см. Раздел 7.13, "Компилируяfinally
"). aload _ <n> инструкция не может использоваться, чтобы загрузить значение типаreturnAddress
от локальной переменной на стек операнда. Эта асимметрия с соответствующим astore _ <n> инструкция является намеренной.
Каждый из astore _ <n> инструкции является тем же самым как astore с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Выдайте исключение или ошибку
Формат
athrow
Формы
athrow = 191 (0xbf)
Стек операнда
..., objectref objectref
Описание
objectref должен иметь типreference
и должен обратиться к объекту, который является экземпляром классаThrowable
или подклассаThrowable
. Это выталкивается от стека операнда. objectref тогда бросается, ища текущий метод (§3.6) для первого обработчика исключений, который соответствует класс objectref, как дано алгоритмом в §3.10.
Если обработчик исключений, который соответствует objectref, находится, это содержит расположение кода, предназначенного, чтобы обработать это исключение. pc
регистр сбрасывается к тому расположению, стек операнда текущего фрейма очищается, objectref пододвигается обратно на стек операнда, и выполнение продолжается.
Если никакой обработчик исключений соответствия не находится в текущем фрейме, тот фрейм выталкивается. Если текущий фрейм представляет вызов a synchronized
метод, монитор, полученный или повторно введенный на вызове метода, выпускается или выходится (соответственно) как будто выполнением monitorexit инструкции. Наконец, фрейм его invoker восстанавливается, если такой фрейм существует, и objectref повторно бросается. Если никакой такой фрейм не существует, выходы текущего потока.
Исключения на этапе выполнения
Если objectrefnull
, athrow бросает aNullPointerException
вместо objectref.
Иначе, если метод текущего фрейма является asynchronized
метод и текущий поток не являются владельцем монитора, полученного или повторно введенного на вызове метода, athrow бросаетIllegalMonitorStateException
вместо объекта, ранее бросаемого. Это может произойти, например, если резко завершениеsynchronized
метод содержит monitorexit инструкцию, но никакую monitorenter инструкцию, на объекте, на котором синхронизируется метод.
Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в §8.13 и если первое из тех правил нарушается во время вызова текущего метода, то athrow бросает IllegalMonitorStateException
вместо объекта, ранее бросаемого.
Примечания
Схема стека операнда для athrow инструкции может вводить в заблуждение: Если обработчик для этого исключения является соответствующим в текущем методе, athrow инструкция отбрасывает все значения на стеке операнда, то нажатия брошенный объект на стек операнда. Однако, если никакой обработчик не является соответствующим в текущем методе, и исключение выдается дальше цепочка вызова метода, то стек операнда метода (если любой), который обрабатывает исключение, очищается, и objectref продвигается на тот пустой стек операнда. Отбрасываются все прошедшие фреймы от метода, который выдавал исключение до, но не включая, метод, который обрабатывает исключение.
Содержание | Предыдущий | Следующий | Индекс
Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com