JavaScript. Подробное руководство, 6-е издание, стр. 159

<b>runCommand(cmd.    // Запускает системную команду с нулем или более </b>

<b>[args...])         // аргументов командной строки </b>

<b>quit()             // Завершает работу Rhino</b>

Как получить Rhino

Интерпретатор Rhino - свободное программное обеспечение, разработанное проектом Mozilla. Вы можете загрузить копию по адресу http://www.mozilla.org/rhino/. Версия Rhino 1.7г2 реализует ECMAScript 3 и ряд расширений языка, описанных в главе 11. Rhino - достаточно зрелый программный продукт, и новые его версии появляются не так часто. На момент написания этих строк в репозитории с исходными текстами была доступна предварительная версия 1.7гЗ, включающая частичную реализацию стандарта ECMAScript 5.

Rhino распространяется в виде JAR-архива. Запускается он командой, как показано ниже:

<b>java -jar rhino1_7R2/js.jar program.js</b>

Если опустить параметр program.js, интерпретатор Rhino запустится в интерактивном режиме, который позволит вам опробовать простенькие программы и однострочные примеры.

**************************************************

Обратите внимание на функцию

<b>print():</b>
мы будем использовать ее в этом разделе вместо
<b>console.log().</b>
Интерпретатор Rhino представляет пакеты и классы Java как объекты JavaScript:

<b>// Глобальная переменная Packages определяет корень иерархии пакетов Java </b>

<b>Packages.any.package.name // Любой пакет из CLASSPATH</b>

<b>java.lang // Глобальная переменная java - краткая ссылка на Packages.java</b>

<b>javax.swing // A javax - краткая ссылка на Packages.javax</b>

<b>// Классы: доступны как свойства пакетов </b>

<b>var System = java.lang.System; </b>

<b>var JFrame = javax.swing.JFrame;</b>

Поскольку пакеты и классы представлены как объекты JavaScript, их можно присваивать переменным, чтобы давать им более короткие имена. Но при желании их можно импортировать более формальным способом:

<b>var ArrayList = java.util.ArrayList; // Создать краткое имя для класса </b>

<b>importClass(java.util.HashMap); // Аналог: var HashMap=java.util.HashMap</b>

<b>// Импорт пакета (отложенный) с помощью importPackage().</b>

<b>// Не следует импортировать java.lang: слишком много конфликтов имен</b>

<b>// с глобальными переменными JavaScript. </b>

<b>importPackage(java.util); </b>

<b>importPackage(java.net);</b>

<b>// Другой прием: передать произвольное количество классов и пакетов функции </b>

<b>// JavaImporter() и использовать возвращаемый объект с инструкцией with </b>

<b>var guipkgs = JavaImporter(java.awt, java.awt.event, Packages.javax.swing);</b>

<b>with (guipkgs) {</b>

<b>  /* Здесь определены такие классы, как Font, ActionListener и JFrame */</b>

<b>}</b>

С помощью ключевого слова

<b>new</b>
можно создавать экземпляры классов языка Java, как если бы это были классы JavaScript:

<b>// Объекты: создание из классов Java с помощью ключевого слова new </b>

<b>var f = new java. io. File(&quot;tmp/test''); // Этот объект используется ниже </b>

<b>var out = new java.io.FileWriter(f);</b>

Интерпретатор Rhino позволяет использовать JavaScript-оператор instanceof для работы с объектами и классами на языке Java:

<b>f instanceof java.io.File // =&gt; true</b>

<b>out instanceof java.io.Reader // =&gt; false: объект Writer, а не Reader</b>

<b>out instanceof java.io.Closeable // =&gt; true: Writer реализует Closeable</b>

Как видно выше в примерах создания объектов экземпляров, интерпретатор Rhino позволяет передавать значения конструкторам Java и присваивать возвращаемые ими значения переменным JavaScript. (Обратите внимание на неявное преобразование типов, выполняемое интерпретатором Rhino в этом примере: JavaScript-строка "/tmp/test" автоматически преобразуется в значение типа java.lang.String.) Методы Java очень похожи на конструкторы Java, и Rhino позволяет программам на языке JavaScript вызывать методы на языке Java:

<b>// Статические методы на языке Java действуют подобно функциям JavaScript </b>

<b>java.lang.System.getProperty(&quot;java.version&quot;) // Вернет версию Java</b>

<b>var isDigit = java.lang.Character.isDigit; // Присвоит статич. метод переменной </b>

<b>isDigit(&quot;t&quot;)   // =&gt; true: Арабская цифра 2</b>

<b>// Вызвать методы экземпляра объектов f и out на языке Java, созданных выше</b>

<b>out.write(&quot;Hello World\n&quot;);</b>

<b>out.close():</b>

<b>var len = f.length();</b>

Кроме того, Rhino позволяет получать и изменять значения статических полей Java-классов и полей экземпляров Java-объектов из программы на языке JavaScript. В классах на языке Java часто не определяют общедоступные поля, отдавая предпочтение методам доступа. Если в Java-классе определены методы доступа, Rhino обеспечивает доступ к ним, как к свойствам объекта на языке JavaScript:

<b>// Прочитать значение статического поля Java-класса </b>

<b>var stdout = java.lang.System.out:</b>