- •ПРЕДИСЛОВИЕ
- •Об этой книге
- •Примеры и документация
- •Глава 1 ПЕРВОЕ ЗНАКОМСТВО С JAVA
- •1.4.1.Символы Unicode
- •1.9.Строковые объекты
- •1.10.1.Класс Object
- •1.14.Инфраструктура Java
- •Глава 2 КЛАССЫ И ОБЪЕКТЫ
- •2.1.Простой класс
- •2.7.Ссылка this
- •2.10.1.Метод finalize
- •2.11.Метод main
- •Глава 3 РАСШИРЕНИЕ КЛАССОВ
- •3.6.Класс Object
- •Глава 4 ИНТЕРФЕЙСЫ
- •4.2. Одиночное и множественное наследование
- •4.6. Для чего применяются интерфейсы
- •Глава 5 ЛЕКСЕМЫ, ОПЕРАТОРЫ И ВЫРАЖЕНИЯ
- •5.1.Набор символов
- •5.20. Операторы присваивания
- •Глава 6 ПОРЯДОК ВЫПОЛНЕНИЯ
- •6.3.Оператор switch
- •6.5.Оператор for
- •6.7.Оператор break
- •6.8.Оператор continue
- •6.9.Оператор return
- •Глава 7 ИСКЛЮЧЕНИЯ
- •7.3.Условие throws
- •7.4.1.Условие finally
- •Глава 8 СТРОКИ
- •8.8.Класс StringBuffer
- •Глава 9 ПОТОКИ
- •9.2.1.Методы synchronized
- •9.2.2.Операторы synchronized
- •9.8.Прерывание потока
- •9.11.Использование Runnable
- •Глава 10 ПАКЕТЫ
- •Глава 11 ПАКЕТ ВВОДА/ВЫВОДА
- •11.2.Класс InputStream
- •11.3.Класс OutputStream
- •11.6.Класс PrintStream
- •11.9.Класс StringBufferInputStream
- •11.12.Класс SequenceInputStream
- •11.13.Класс LineNumberInputStream
- •11.14.Класс PushbackInputStream
- •11.15.Класс StreamTokenizer
- •11.17.Класс RandomAccessFile
- •11.18.Класс File
- •11.19.Интерфейс FilenameFilter
- •Глава 12 СТАНДАРТНЫЕ ВСПОМОГАТЕЛЬНЫЕ СРЕДСТВА
- •12.1.Класс BitSet
- •12.2.Интерфейс Enumeration
- •12.4.Класс Vector
- •12.5.Класс Stack
- •12.6.Класс Dictionary
- •12.7.Класс Hashtable
- •12.8.Класс Properties
- •12.9.Классы Observer/Observable
- •12.10.Класс Date
- •12.11.Класс Random
- •13.1.Класс Class
- •13.4.Класс Boolean
- •13.5.Класс Character
- •13.6.Класс Number
- •13.7.Класс Integer
- •13.8.Класс Long
- •Глава 14 СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ
- •14.5.Класс Runtime
- •14.8.Класс Math
- •Приложение А Родные методы
- •А.1 Обзор
- •А.2 Согласование с C и C++
- •А.2.1 Имена
- •А.2.2 Методы
- •А.2.3 Типы
- •А.2.5 Средства безопасности
- •А.2.6 Работа с памятью
- •А.3 Пример
- •А.3.1 Внутреннее строение LockableFile
- •А.4 Строки
- •А.5 Массивы
- •А.6 Создание объектов
- •А.7 Вызов методов Java
- •А.8 Последнее предупреждение
- •Приложение В Полезные таблицы
- •Таблица 3. Приоритет операторов
converted to PDF by BoJIoc
Приложение А Родные методы
Их прозвали “чудо-рабочими”, когда один из них поинтересовался, каким гаечным
ключом нужно забивать шуруп в стену
Джордж Браун, конгрессмен, Сан-Бернардино, Калифорния.
Иногда возникают ситуации, когда приложение или библиотека не могут быть написаны исключительно на языке Java, и тогда приходится создавать код на другом языке, который, вероятно, более точно учитывает специфику используемой платформы. Обычно потребность в этом возникает в следующих случаях:
∙Уже имеется большой объем работающего программного кода. Проще написать “прокладку” для этого кода на Java, чем переписывать его заново.
∙Приложение должно пользоваться системными средствами, отсутствующими в классах Java.
∙Среда Java не обладает достаточным быстродействием для приложений, критичных по времени, и реализация их на другом языке может оказаться более эффективной.
Чтобы помочь программисту в подобных ситуациях, Java позволяет реализовывать родные (native) методы на каком-либо из локальных (родных) языков программирования, обычно C или C++. Родные методы объявляются следующим образом:
public native void unlock() throws IOException;
Ключевое слово native представляет собой еще один модификатор для объявляемого метода. Родные методы реализуются на родных языках, поэтому для них не существует программного кода на Java. Тем не менее, они вызываются из Java-программ, как и любые другие методы.
Класс, содержащий родной метод, в соответствии с требованиями безопасности, не может загружаться по сети и выполняться. Более конкретно — классы с родными методами не могут использоваться в аплетах<$Iаплет>. Даже если вопросы безопасности вас не интересуют, родной код не дает тех гарантий переносимости, которые предоставляет Java. Любой код на Java, использующий родные методы, должен отдельно переноситься на каждую целевую платформу.
И все же родные методы могут приносить пользу, особенно если вы будете полагаться на общедоступные библиотеки. Однако код Java, содержащий родные методы, ни в коем случае не может применяться в качестве аплета, запускаемого удаленным пользователем, поскольку аплет должен соответствовать требованиям переносимости и безопасности.
При использовании родных методов также приходится жертвовать защитными ограничениями Java. Так, в традиционных языках, может происходить выход за границы массива и появление неопределенных значений указателей. Все ограничения на родные методы задаются только тем языком, на котором они написаны.
В этой главе рассказано, как реализовать родной метод на языке C в системах семейства POSIX (к которым относятся, например, Windows NT и большинство реализаций UNIX). Некоторые детали в вашей системе могут отличаться от описанных, а многие среды поддерживают и другие языки кроме C, например, C++. Информацию об этом можно найти в вашей документации. Здесь мы рассматриваем многие важные аспекты