
- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 12. Ввод/вывод, апплеты и другие темы 325
Данная команда производит файл заголовка с именем NativeDemo.h. Этот файл должен быть включен в С-файл, который реализует test (). Вывод указанной команды:
/* НЕ РЕДАКТИРУЙ ЭТОТ ФАЙЛ — он сгенерирован машиной */
tinclude <jni.h>
/* Заголовок класса NativeDemo */ :
lifndef _Included_NativeDemo
#define __Included_NativeDemo
#ifdef cplusplus
extern "C" ( #endif /*
Class: NativeDemo
Method: test
Signature: ()V . • . */
JNIEXPORT void JNICALL Java_NativeDemo_test (JNIEnv *, jobject);
fifdef _ _cplusplus
}
#endif
ttendif
Обратите особое внимание на следующую строку, определяющую прототип функции test о, которую вы будете создавать:
JNIEXPORT void JNICALL Java _NativeDemo_test (JNIEnv *, jobject);
Заметим, что имя функции — Java_NativeDemo_test о. Его нужно использо-вать как имя native-функции, которую вы реализуете. То есть вместо создания С-функции, названной test о, вы будете создавать функцию с именем
Java_NativeDemo_test () . Компонент NativeDemo префикса добавляется ПОТО-
му, что он идентифицирует метод test о как часть класса NativeDemo. Помните, что другой класс может определить свой собственный native-метод
test (), КОТОрЫЙ ПОЛНОСТЬЮ отличается ОТ ТОГО, ЧТО объявлен В NativeDemo.
Включение в префикс имени класса обеспечивает возможность дифференцировать различные версии. Общее правило: native-функциям нужно давать имя, чей префикс включает имя класса, в котором они объявлены.
После создания необходимого файла заголовка вы можете написать свою реализацию test о и сохранить его в файле с именем NativeDemo. с:
/* Этот файл содержит С-версию метода test(). */
tinclude <jni.h>
#include "NativeDemo.h"
#include <stdio.h>
326 Часть I. Язык Java
JNIEXPORT void JNICALL Java_NativeDemo_test(JNIEnv *env, jobject ob j) {
jclass els;
jfieldID fid;
'jint i;
printf("Запуск native-метода.\n");
els = (*env)->GetObjectClass(env, obj);
fid = (*env)->GetField!D(env, els, "i", "I");
if(fid == 0) {
printf("He возможно получить id поля.\п"}; return; }
i = (*env)->GetIntField(env, obj , fid); printf("i = %d\n", i);
(*env)->SetIntField(env, obj, fid, 2*i); printf("Завершение native-метода.\n"); }
Заметим, что файл включает jni.h, который содержит интерфейсную информацию. Этот файл обеспечивается Java-компилятором. Файл заголовка NativeDemo.h был создан ранее с помощью утилиты javah.
В этой функции метод Getobjectciasso используется для получения С-струк-
туры, Которая СОДерЖИТ информацию О классе NativeDemo. Метод GetFieldlDO
возвращает С-структуру с информацией о поле класса с именем "i". Метод GetintFieldo извлекает первоначальное значение этого поля. Метод setintFieido хранит обновленное значение в данном поле. (Дополнительные методы, которые обрабатывают другие типы данных, см. в файле jni.h.)
После создания NativeDemo.с нужно откомпилировать его и создать DLL-файл. Для этого используется Microsoft-компилятор C/C++ со следующей командной строкой:
Cl /LD NativeDemo.с
Это создает файл с именем NativeDemo.dll. Как только указанная процедура проделана, можно выполнять Java-программу, которая сгенерирует следующий вывод:
Этот ob.i перед native-методом: 10
Запуск native-метода.
i = 10
Завершение native-метода.
Этот ob.i после native-метода: 20