Содержание | Предыдущий | Следующий | Индекс

ГЛАВА 1

Введение


Java является параллельным, основанным на классе, объектно-ориентированным языком общего назначения. Это разрабатывается, чтобы быть достаточно простым, что много программистов могут достигнуть беглости на языке. Java связывается с C и C++, но организуется скорее по-другому со многими аспектами C и опущенного C++ и несколько идей с других включенных языков. Java предназначается, чтобы быть производственным языком, не языком исследования, и таким образом, как К. А. Р. Хоар предложил в своей классической статье на проекте языка, проект Java избежал включая новые и непротестированные функции.

Java со строгим контролем типов. Эта спецификация ясно различает ошибки времени компиляции, которые могут и должны быть обнаружены во время компиляции, и тех, которые происходят во время выполнения. Время компиляции обычно состоит из преобразования программ Java в машинно-независимое представление байт-кода. Операции этапа выполнения включают загрузку, и соединение классов должно было выполнить программу, дополнительную генерацию машинного кода и динамическую оптимизацию программы, и фактическое выполнение программы.

Java является относительно высокоуровневым языком в этом, детали машинного представления не доступны через язык. Это включает автоматическое управление хранением, обычно используя сборщик "мусора", чтобы избежать проблем безопасности явного освобождения (как в К free или C++ 's delete). Высокоэффективный собрал "мусор", реализации Java могли ограничить паузы к программированию систем поддержки и приложениям реального времени. Java не включает опасных конструкций, таких как доступы массива без индексной проверки, так как такие опасные конструкции заставили бы программу вести себя неуказанным способом.

Java обычно компилируется в bytecoded набор команд и двоичный формат, определенный в Спецификации виртуальной машины Java (Аддисон-Уэсли, 1996). Большинство реализаций Java для программирования общего назначения будет поддерживать дополнительные пакеты, определенные в ряде книг в соответствии с общим заголовком Прикладной программный интерфейс Java (Аддисон-Уэсли).

Эта Спецификация языка Java организуется следующим образом:

Глава 2 описывает грамматики и нотацию, используемую, чтобы представить лексические и синтаксические грамматики для Java.

Глава 3 описывает лексическую структуру Java, который основан на C и C++. Java пишется в наборе символов Unicode. Java поддерживает запись символов Unicode на системах та поддержка только ASCII.

Глава 4 описывает типы Java, значения, и переменные. Типы Java являются типами примитивов и ссылочными типами.

Типы примитивов определяются, чтобы быть тем же самым на всех машинах и во всех реализациях, и являются различными размерами two's-дополнительных целых чисел, единственных - и стандарт IEEE 754 двойной точности числа с плавающей точкой, a boolean введите, и символ Unicode char ввести. Значения типов примитивов не совместно используют состояние.

Ссылочные типы Java являются типами классов, интерфейсными типами, и типами массива. Ссылочные типы реализуются динамически создаваемыми объектами, которые являются или экземплярами классов или массивами. Могут существовать много ссылок на каждый объект. Все объекты (включая массивы) поддерживают методы стандартного класса Object, который является (единственным) корнем иерархии классов. Предопределенный String класс поддерживает символьные строки Unicode. Стандартные классы существуют для того, чтобы обернуть примитивные значения в объектах.

Переменные являются введенными местами хранения. Переменная типа примитива содержит значение того точного типа примитива. Переменная типа класса может содержать нулевую ссылку или ссылку на объект, тип которого то, что тип класса или любой подкласс того типа класса. Переменная интерфейсного типа может содержать нулевую ссылку или ссылку на экземпляр любого класса, который реализует интерфейс. Переменная типа массива может содержать нулевую ссылку или ссылку на массив. Переменная типа класса Object может содержать нулевую ссылку или ссылку на любой объект, ли экземпляр класса или массив.

Глава 5 описывает преобразования Java и числовые продвижения. Преобразования изменяют тип времени компиляции и, иногда, значение выражения. Числовые продвижения используются, чтобы преобразовать операнды числового оператора к общему типу, где работа может быть выполнена. На языке нет никаких лазеек; набирает ссылочные типы, проверяются во время выполнения, чтобы гарантировать безопасность типов.

Глава 6 описывает объявления и имена, и как определить, какое среднее значение имен (обозначают). Java не требует, чтобы типы или их элементы были объявлены прежде, чем они будут использоваться. Порядок объявления является существенным только для локальных переменных и порядка инициализаторов полей в классе или интерфейсе.

Java обеспечивает управление контекстом имен и поддерживает ограничения на внешний доступ к элементам пакетов, классов, и интерфейсов. Это помогает в записи больших программ, отличая реализацию типа от его пользователей и тех, кто расширяет это. Стандартные соглашения о присвоении имен, которые делают для большего количества читаемых программ, описываются здесь.

Глава 7 описывает структуру программы Java, которая организуется в пакеты, подобные модулям Modula. Элементы пакета являются единицами компиляции и подпакетами. Единицы компиляции содержат описания типа и могут импортировать типы из других пакетов, чтобы дать им краткие названия. У пакетов есть имена в иерархическом пространстве имен, и система имени Интернет-домена может использоваться, чтобы сформировать уникальные имена пакета.

Глава 8 описывает классы Java. Элементы классов являются полями (переменные) и методы. Переменные класса существуют однажды на класс. Методы класса работают независимо от конкретной цели. Переменные экземпляра динамически создаются в объектах, которые являются экземплярами классов. Методы экземпляра вызываются на экземпляры классов; такие экземпляры становятся текущим объектом this во время их выполнения, поддерживая стиль объектно-ориентированного программирования.

Классы поддерживают единственное наследование реализации, в котором реализация каждого класса получается из того из единственного суперкласса, и в конечном счете из класса Object. Переменные типа класса могут сослаться на экземпляр того класса или любого подкласса того класса, позволяя новые типы использоваться с существующими методами, полиморфно.

Классы поддерживают параллельное программирование с synchronized методы. Методы объявляют проверенные исключения, которые могут явиться результатом их выполнения, которое позволяет времени компиляции, проверяя гарантировать, что обрабатываются исключительные условия. Объекты могут объявить a finalize метод, который будет вызван перед объектами, отбрасывается сборщиком "мусора", позволяя объекты очистить их состояние.

Для простоты у Java нет ни объявления "заголовки", отдельные от реализации класса, ни отдельного типа и иерархий классов.

Хотя Java не включает параметризованные классы, семантика массивов таковые из параметризованного класса с небольшим количеством синтаксического сахара. Как Бета языка программирования, Java использует проверку типа времени выполнения, храня ссылки в массивах, чтобы гарантировать полную безопасность типов.

Глава 9 описывает интерфейсные типы Java, которые объявляют ряд абстрактных методов и констант. Классы, которые иначе не связаны, могут реализовать тот же самый интерфейсный тип. Переменная интерфейсного типа может содержать ссылку на любой объект, который реализует интерфейс. Многократное интерфейсное наследование поддерживается.

Глава 10 описывает массивы Java. Доступы массива включают проверку границ. Массивы динамически создаются объекты и могут быть присвоены переменным типа Object. Java поддерживает массивы массивов, а не многомерных массивов.

Глава 11 описывает исключения Java, которые невозобновляются и полностью интегрированные с семантикой языка и механизмами параллелизма. Есть три вида исключений: проверенные исключения, исключения на этапе выполнения, и ошибки. Компилятор гарантирует, что проверенные исключения должным образом обрабатываются, требуя, чтобы метод или конструктор могли привести к проверенному исключению, только если это объявляет это. Это обеспечивает время компиляции, проверяя, что обработчики исключений существуют, и помогает программированию в большом. Большинство определяемых пользователем исключений должно быть проверенными исключениями. Недопустимые операции в программе, обнаруженной виртуальной машиной Java, приводят к исключениям на этапе выполнения, такой как NullPointerException. Ошибки следуют из отказов, обнаруженных виртуальной машиной, такой как OutOfMemoryError. Самые простые программы не пытаются обработать ошибки.

Глава 12 описывает действия, которые происходят во время выполнения программы Java. Программа Java обычно сохранена как двоичные файлы, представляющие скомпилированные классы и интерфейсы. Эти двоичные файлы могут быть загружены в виртуальную машину Java, соединились с другими классами и интерфейсами, и инициализировали.

После инициализации могут использоваться методы класса и переменные класса. Некоторые классы можно инстанцировать, чтобы создать новые объекты типа класса. Объекты, которые являются экземплярами класса также, содержат экземпляр каждого суперкласса класса, и объектное создание включает рекурсивное создание этих экземпляров суперкласса.

Когда на объект больше не ссылаются, он может быть исправлен сборщиком "мусора". Если объект объявляет финализатор, финализатор выполняется прежде, чем объект исправляется, чтобы дать объекту последний шанс очистить средства, которые не были бы иначе высвобождены. Когда класс больше не необходим, он может быть разгружен; если финализатор класса объявляется, ему дают шанс очистить сначала. Объекты и классы могут быть завершены на выходе виртуальной машины Java.

Глава 13 описывает совместимость на уровне двоичных кодов, определяя воздействие изменений к типам на других типах, которые используют измененные типы, но не были перекомпилированы. Эти соображения представляют интерес для разработчиков типов, которые должны быть широко распределены, в продолжающейся серии версий, часто через Интернет. Хорошие среды разработки программы автоматически перекомпилировали зависимый код всякий раз, когда тип изменяется, таким образом, большинство программистов не должно быть обеспокоено этими деталями.

Глава 14 описывает блоки Java и операторы, которые основаны на C и C++. Java имеет нет goto, но включает маркированный break и continue операторы. В отличие от C, Java требует boolean выражения в операторах управления, и не преобразовывают типы в boolean неявно, в надежде на фиксацию большего количества ошибок во время компиляции. A synchronized оператор обеспечивает основную блокировку монитора уровня объектов. A try оператор может включать catch и finally пункты, чтобы защитить от нелокальных передач управления.

Глава 15 описывает выражения Java. Java полностью определяет (очевидный) порядок оценки выражений для увеличенного детерминизма и мобильности. Перегруженные методы и конструкторы разрешаются во время компиляции, выбирая самый определенный метод или конструктора от тех, которые применимы. Java выбирает который метод или конструктор при использовании того же самого основного алгоритма, используемого на языках с более богатой диспетчеризацией, таких как CLOS Lisp и Дилан, для будущего.

Глава 16 описывает точный путь, которым Java гарантирует, что локальные переменные определенно устанавливаются перед использованием. В то время как все другие переменные автоматически инициализируются к значению по умолчанию, Java автоматически не инициализирует локальные переменные, чтобы избежать маскировать ошибки программирования.

Глава 17 описывает семантику потоков Java и блокировок, которые основаны на основанном на мониторе параллелизме, первоначально начатом с Меза-языка программирования. Java определяет модель памяти для многопроцессорных систем совместно используемой памяти, которая поддерживает высокоэффективные реализации.

Глава 18 описывает средства для того, чтобы автоматически генерировать документацию из специальных комментариев в исходном коде Java.

Глава 19 представляет LALR (1) синтаксическая грамматика для Java, и описывает различия между этой грамматикой и описательной грамматикой, используемой в теле спецификации языка, которая предшествует этому.

Главы 20 - 22 являются справочником для ядра стандартного Прикладного программного интерфейса Java. Эти пакеты должны быть включены во все системы Java общего назначения.

Глава 20 описывает пакет java.lang. Типы, определенные в java.lang автоматически импортируются, чтобы быть доступными без квалификации во всех программах Java. Они включают исконный класс Object, который является суперклассом всех других классов; классы такой как Integer и Float, которые обертывают типы примитивов в объектах; исключения и ошибки, определенные языком и виртуальной машиной Java; Thread поддержка; металингвистические классы такой как Class и ClassLoader; и класс System, который абстрагирует хост-систему.

Глава 21 описывает пакет java.util, который определяет несколько основных служебных классов, таких как класс хеш-таблицы и генератор псевдослучайного числа.

Глава 22 описывает пакет java.io, который определяет основные средства ввода/вывода, включая файлы произвольного доступа и потоки значений типов примитивов.

Книга заканчивается индексом, кредитами на расценки, используемые в книге, и выходных данных, описывающих, как книга создавалась.

1.1 Примеры программы

Большинство примеров программы, данных в тексте, готово быть выполненным системой Java и подобно в форме:


class Test {
	public static void main(String[] args) {
		for (int i = 0; i < args.length; i++)
			System.out.print(i == 0 ? args[i] : " " + args[i]);
		System.out.println();
	}
}
На рабочей станции Sun, этом классе, сохраненном в файле Test.java, может быть скомпилирован и выполнен, давая команды:


javac Test.java
java Test Hello, world.
создание вывода:

Hello, world.

1.2 Ссылки

Apple Computer. Справочник Дилана. Apple Computer Inc., Купертино, Калифорния. 29 сентября 1995. См. также http://www.cambridge.apple.com.

Bobrow, Даниэль Г., Линда Г. Демичил, Ричард П. Габриэль, Соня Е. Кеене, Грегор Кикзэйлс, и Дэвид А. Мун. Системная Спецификация Объекта языка Common LISP, 88-002R Документ X3J13, июнь 1988; появляется как Глава 28 Стила, Парня. Язык Common LISP: Язык, 2-ая Цифровая печать редактора, 1990, ISBN 1-55558-041-6, 770-864.

Эллис, Маргарет А., и Бьярне Штруштруп. Аннотируемый Справочник C++. Аддисон-Уэсли, Чтение, Массачусетс, 1990, переизданный с октябрем 1992 исправлений, ISBN 0-201-51459-1.

Харбисон, Сэмюэль. Modula-3. Прентис Хол, Энглвудские Утесы, Нью-Джерси, 1992, ISBN 0-13-596396.

Хоар, К. А. Р. Подсказки на Проекте Языка программирования. Технический отчет № CS-73-403 Кафедры информатики Стэнфордского университета, декабрь 1973. Переизданный на Симпозиуме SIGACT/SIGPLAN по Принципам Языков программирования. Ассоциация вычислительной техники, Нью-Йорк, октябрь 1973.

Стандарт IEEE для Двоичной Арифметики С плавающей точкой. Станд. ANSI/IEEE 754-1985. Доступный из Глобальных Технических Документов, 15 Инвернесса Путем Восток, Энглвуд, Колорадо 80112-5704 США; 800-854-7179.

Керниган, Брайан В., и Деннис М. Ричи. Язык программирования C, 2-ой редактор Прентис Хол, Энглвудские Утесы, Нью-Джерси, 1988, ISBN 0-13-110362-8.

Мэдсен, Оле Лерман, Бирджер Мыллер-Педерсен, и Кристен Нигэард. Объектно-ориентированное программирование в Бета Языке программирования. Аддисон-Уэсли, Чтение, Массачусетс, 1993, ISBN 0-201-62430-3.

Митчелл, Джеймс Г., Уильям Мейбери, и Ричард Свит. Меза-Язык программирования, Версия 5.0. Xerox PARC, Пало-Альто, Калифорния, CSL 79-3, апрель 1979.

Stroustrup, Бьярне. C++ Язык Progamming, 2-ой редактор Аддисон-Уэсли, Чтение, Массачусетс, 1991, переизданный с январем 1994 исправлений, ISBN 0-201-53992-6.

Консорциум Unicode. Стандарт Unicode: Глобальная Кодировка символов, Версия 1.0. Аддисон-Уэсли, Чтение, Массачусетс, Объем 1, 1991, ISBN 0-201-56788-1, и Объем 2, 1992, ISBN 0-201-60845-6. (Версия 2, предстоящая, 1996.)


Содержание | Предыдущий | Следующий | Индекс

Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com



Spec-Zone.ru - all specs in one place



free hit counter