JavaScript. Подробное руководство, 6-е издание, стр. 159
<b>runCommand(cmd. // Запускает системную команду с нулем или более </b><b>[args...]) // аргументов командной строки </b><b>quit() // Завершает работу Rhino</b>Интерпретатор 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><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><b>// Объекты: создание из классов Java с помощью ключевого слова new </b><b>var f = new java. io. File("tmp/test''); // Этот объект используется ниже </b><b>var out = new java.io.FileWriter(f);</b>Интерпретатор Rhino позволяет использовать JavaScript-оператор instanceof для работы с объектами и классами на языке Java:
<b>f instanceof java.io.File // => true</b><b>out instanceof java.io.Reader // => false: объект Writer, а не Reader</b><b>out instanceof java.io.Closeable // => 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("java.version") // Вернет версию Java</b><b>var isDigit = java.lang.Character.isDigit; // Присвоит статич. метод переменной </b><b>isDigit("t") // => true: Арабская цифра 2</b><b>// Вызвать методы экземпляра объектов f и out на языке Java, созданных выше</b><b>out.write("Hello World\n");</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>