Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
140
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

Приложение а Родные методы

Их прозвали “чудо-рабочими”, когда один из них поинтересовался, каким гаечным ключом нужно забивать шуруп в стену

Джордж Браун, конгрессмен, Сан-Бернардино, Калифорния.

Иногда возникают ситуации, когда приложение или библиотека не могут быть написаны исключительно на языке 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++. Информацию об этом можно найти в вашей документации. Здесь мы рассматриваем многие важные аспекты согласования языка C с системой Java компании Sun, версия 1.0.2. Возможно, в вашей локальной среде присутствуют изменения и усовершенствования или используется совершенно иная схема согласования. В частности, описанные здесь способы связывания (binding) родных методов наверняка изменятся в будущих версиях. Но даже с учетом этих обстоятельств, данная глава поможет вам понять некоторые аспекты связывания родных методов, не зависящие от конкретной схемы, принятой в вашей среде.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]