Язык Java определяет различные типы данных, такие как основные типы Int, Double и т. Д., А также объект родительского класса всех классов и т. Д. Это типы уровня Java, а процесс обработки с использованием локальных методов требует их соответствующих типов.
Нативные методы, написанные в слое Java, составлены компилятором в Bytecode. Bytecode будет записывать различные типы параметров в файлы класса в соответствии со спецификацией, такой как B, представляет байт, I представляет Int, J представляет длинный и т. Д., Тогда локальный метод следующим образом записан как (Ljava/Lang/Object; II) V.
Общественный статический тест Native Void (Object O, Int I, Int i2);
Соответствующие методы, приведенные выше, зарегистрированы в JVM. При выполнении для вызова локального метода, локальный тип данных будет преобразован в соответствии с картой типа, такой как Int-> Jint и Object-> Jobject. На самом деле, Int и Jint одинаковы в C ++, просто используйте Typedef, чтобы определить другое имя. Jobject - это указатель. Двигатель выполнения генерирует объект объекта при выполнении логики слоя Java. Он имеет специальную структуру данных в уровне JVM. Задача здесь - указатель на эту структуру. Когда это необходимо использовать, его можно поднять в структуру данных уровня JVM, а затем его можно работать. Кроме того, ООП используется в JVM для представления указателей объектов.
| Java -тип | Родной тип | ценить |
|---|---|---|
| логический | Jboolean | истинно или ложь |
| байт | Jbyte | -128 ~ 127 |
| Короткий | JSHORT | -Поу (2,15) ~ Военнопленная (2,15) -1 |
| инт | jint | -pow (2,31) ~ pow (2,31) -1 |
| длинный | Jlong | -pow (2,63) ~ pow (2,63) -1 |
| плавать | Jfloat | IEEE754 Стандартный номер с плавающей запятой с одной режиссером |
| двойной | Jdouble | IEEE754 Стандартный номер двойной точки с плавающей запятой |
| девчонка | jchar | 16-битные символы Unicode. |
В дополнение к базовому отображению типа, другие типы объектов в слое Java являются эталонными типами, поэтому локальный метод соответствует типу Jobjuit. Кроме того, он также будет получать некоторые часто используемые подклассы, такие как jstring, jclass и т. Д.
class _jobject {}; class _jclass: public _jobject {}; class _jThrowable: public _jobject {}; class _jString: public _jobject {}; class _jrray: public _jobject {}; class _jbooleanray: public _jarray {{{_jray {_ -джюр _ _jarray {}; class _jCharraray: public _jarray {}; class _jshortarray: public _jarray {}; class _jintarray: public _jarray {}; class _jlongarray: public _jarray {}; class _jflaray _jarray : public _jarray {}; class _jobjectarray: public _jarray {};Вы можете видеть, что класс _jobject определен, который является пустым классом, в то время как другие классы включают в себя _jclass _jThrowable _jstring _jarray, все наследуются от класса _jobject. Кроме того, тип массива также получает 9 подклассов, соответствующих массиву базового типа и массива типа эталонного типа соответственно.
После определения класса определите псевдоним указателя. Вот тип локального метода. Кроме того, это определения C ++. Если это компилятор C, он будет использовать struct для определения _jobject, а не класса.
typedef _jobject *jobject; typedef _jclass *jclass; typedef _jthrowable *jthrowable; typedef _jstring *jstring; typedef _jarray *jrray; typedef _jbooleanarray *jbooleanarray; typedef _jbytearray *jbytearray; *jChararray; typedef _jshortarray *jshortarray; typedef _jintarray *jintarray; typedef _jlongarray *jlongarray; typedef _jfloatarray *jfloataRray; typedef _jdoublearray *jdoublearray; typedef _jobjectarray *jobobjectaray *
Приведенный выше ссылочный тип определяется как пустой класс. Здесь мы понимаем пустой класс в C ++. Обычно нам нужно определить пустой класс следующими двумя способами.
класс пуст {} struct eMent {}После приведенного выше определения размер пустого класса составляет 1, но каково использование пустого класса, если нет ничего? На самом деле, его можно использовать для различения различных объектов. Различные объекты, определенные пустыми классами, имеют разные адреса. Объекты, работающие с использованием новых, также имеют разные указатели. Кроме того, пустые классы также могут различать различные категории.
Итак, как мы используем эти типовые сопоставления в связи? Это на самом деле очень просто. Ответ - преобразовать указатели. Как упоминалось ранее, объекты в слое Java имеют определенную структуру данных в JVM, то есть используйте ООП для представления указателей объектов. Затем задание может быть преобразовано следующим образом, где ручка является типом задания.
oop result = *inerterpret_cast <ooop *> (handle);
Это очень удобно для дальнейшего обработки его после преобразования в ООП. Например, если вы хотите получить некоторые метаданные, связанные с классом, вы можете использовать Klass для его получения.
Выше типы, определенные слоем Java, имеют соответствующие типы данных в локальном методе. Кроме того, исходный код уровня Java составлен в байт -код и сохраняет типы, соответствующие параметрам локального метода. При выполнении JVM тип, соответствующий локальному методу, может быть преобразован в соответствии с различными типами. Типы, определенные локальным методом, являются пустыми классами. Основная функция - связывать объекты и различать типы объектов. Метаданные объекта или класса могут быть доступны через преобразование указателя при необходимости.