Java

Поделись знанием:
Перейти к: навигация, поиск
Java
Класс языка:

мультипарадигмальный: объектно-ориентированный, структурный, императивный, компонентно-ориентированный, обобщённый, рефлективный

Появился в:

1995

Автор:

Oracle (до 2010 — Sun Microsystems)

Выпуск:

Java Standard Edition 8[1], (18 марта 2014)

Система типов:

статическая, именованная (англ.), явная (англ.), сильная

Основные реализации:

многочисленные

Диалекты:

Generic Java (англ.), Pizza (англ.)

Испытал влияние:

Objective-C[2], Ада 83, Object Pascal[3], UCSD Pascal[4], Oberon[5][6],C++,][7], Smalltalk, Eiffel[8], Mesa (англ.)[9], Modula-3[10], Generic Java (англ.)

Повлиял на:

Ада 2005, C#, Clojure, D, ECMAScript, Groovy, J#, VJ#, JavaScript, PHP, Scala, Python, BeanShell, Kotlin, Gentee

Лицензия:

GNU General Public License / Java Community Process

Сайт:

[java.com m]

Java[11] — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года.





Содержание

Название

Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, которая, в свою очередь, получила наименование одноимённого острова (Ява), поэтому на официальной эмблеме языка изображена чашка с горячим кофе. Существует и другая версия происхождения названия языка, связанная с аллюзией на кофе-машину как пример бытового устройства, для программирования которого изначально язык создавался.

Основные особенности языка

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

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

Часто к недостаткам концепции виртуальной машины относят снижение производительности. Ряд усовершенствований несколько увеличил скорость выполнения программ на Java:

  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее[12]. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10—30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++[13][14][15].

Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине[16]. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.

История версий

JDK 1.0

Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только 21 января 1996 года. Кодовое имя Oak.

JDK 1.1

Вторая версия была выпущена 19 февраля 1997 года. Кодовое имя Oak.

  • Библиотека Accessibility.
  • Java 2D.
  • Поддержка технологии drag-and-drop.
  • Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках.
  • Поддержка воспроизведения аудиофайлов нескольких популярных форматов.
  • Полная поддержка технологии CORBA.
  • JIT-компилятор, улучшенная производительность.
  • Усовершенствования инструментальных средств JDK, в том числе поддержка профилирования Java-программ.

J2SE 1.2

Дата выпуска 8 декабря 1998 года. Кодовое имя Playground. В данном случае встречается путаница. Выпускались книги, например, Beginning Java 2 by Ivor Horton (Mar 1999), фактически по J2SE 1.2 (бывшее название — Java 2). Вместе с тем по сей день такие книги публикуются, например: Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри. Технологии программирования на Java 2. Распределённые приложения (2011).

В то время, когда, как известно, Java 2 была исторически заменена следующими релизами, подобные названия книг дезориентируют в понимании, о какой же версии Java они написаны на самом деле. Если J2SE 1.2 принято считать за Java 2, а авторы книг за Java 2 принимают JDK 7, это приводит к полной путанице.

J2SE 1.3

Дата выпуска 8 мая 2000 года. Кодовое имя Kestrel.

J2SE 1.4

Дата выпуска 6 февраля 2002 года. Кодовое имя Merlin.

J2SE 5.0

Спецификация Java 5.0 была выпущена 30 сентября 2004 года, кодовое имя Tiger. C этой версии изменена официальная индексация, вместо Java 1.5 правильнее называть Java 5.0. Внутренняя же индексация Sun осталась прежней — 1.x. Минорные изменения теперь включаются без изменения индексации, для этого используется слово «Update» или буква «u», например, Java Development Kit 5.0 Update 22. Предполагается, что в обновления могут входить как исправления ошибок, так и небольшие добавления в API, JVM.

В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

  • Перечислимые типы (англ. enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей.
    • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.
    • Перечисление может реализовывать интерфейсы.
    • Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым.
  • Аннотации — возможность добавления в текст программы метаданных, не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнении. Одновременно выпущен инструментарий для использования аннотированного кода. Одно из применений аннотаций — упрощение создания тестовых модулей для Java-кода.
  • Средства обобщённого программирования (англ. generics) — механизм, аналогичный Eiffel (позже также появились и в C#, принципиально отличаются от шаблонов C++), дающий возможность создавать классы и методы с полями и параметрами произвольного объектного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java.
  • Методы с неопределённым числом параметров.
  • Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-обёртками (например, между int — Integer). Наличие такой возможности сокращает код, поскольку исключает необходимость выполнения явных преобразований типов в очевидных случаях.
  • Разрешён импорт статических полей и методов.
  • В язык введён цикл по коллекции объектов (итератор, англ. foreach).
  • Было введено использование Javadoc-комментариев, которые используются для автоматического оформления документации по комментариям в исходном коде.

Java SE 6

Релиз версии состоялся 11 декабря 2006 года, кодовое имя Mustang. Изменена официальная индексация — вместо ожидаемой 6.0 версия значится как 6. Минорные изменения, как и в Java 5.0, вносятся в обычные обновления версии, например, Java Standard Edition Development Kit 6 Update 27. Внесены следующие изменения:

  • Коллекции — добавлены интерфейсы для организации очереди, работающей с двух сторон коллекции; организовывающие поиск по ближайшему соответствию; блокирующие себя во время ожидания элемента. Организованы новые классы, реализующие перечисленные интерфейсы.
  • Добавлена поддержка японского императорского календаря (наряду с уже существующими григорианским и буддийским календарями).
  • Доступны классы-потоки для чтения и передачи сжатых данных, с возможностью передачи их по сети. Сняты ограничения на количество файлов в архиве (ранее 64 Кб), длину названия файла (ранее 256 символов) и количество одновременно открытых файлов (ранее 2000 шт).
  • Организована система управления кэшем и добавлена поддержка параметра «no-cache» в HTTP-запросе.
  • JConsole, графический мониторинг JVM, стала официально поддерживаемой утилитой.
  • Java HTTP Server, позволяет создать полноценный HTTP сервер, с минимально необходимыми функциональными свойствами.
  • Повысилась скорость вычислений на 70 %, скорость операций ввода-вывода возросла в два раза[17].
  • Swing — улучшена работоспособность OpenGL и DirectX; обработка текста на LCD; добавлен GifWriter, для работы с файлами .gif.
  • Исправлено большое количество ошибок.

Java FX

Дата выпуска 8 октября 2013 года.

Java ME Embedded

Дата выпуска 10 октября 2013 года. Кодовое имя Micro Edition.

Java SE 7

Релиз версии состоялся 28 июля 2011 года, кодовое имя Dolphin[18]. В финальную версию Java Standard Edition 7 не были включены все ранее запланированные изменения. Согласно плану развития (план «Б»)[19], включение нововведений будет разбито на две части: Java Standard Edition 7 (без лямбда-исчисления, проекта Jigsaw, и части улучшений Coin) и Java Standard Edition 8 (все остальное), намеченный на конец 2012 года.

В новой версии, получившей название Java Standard Edition 7 (Java Platform, Standard Edition 7), помимо исправления большого количества ошибок, было представлено несколько новшеств. Так, например, в качестве эталонной реализации Java Standard Edition 7 использован не проприетарный пакет JDK, а его открытая реализация OpenJDK, а сам релиз новой версии платформы готовился при тесном сотрудничестве инженеров Oracle с участниками мировой экосистемы Java, комитетом JCP (Java Community Process) и сообществом OpenJDK. Все поставляемые Oracle бинарные файлы эталонной реализации Java Standard Edition 7 собраны на основе кодовой базы OpenJDK, сама эталонная реализация полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с проприетарными продуктами. К другим нововведениям относится интеграция набора небольших языковых улучшений Java, развиваемых в рамках проекта Coin, добавлена поддержка языков программирования с динамической типизацией, таких, как Ruby, Python и JavaScript, поддержка загрузки классов по URL, обновлённый XML-стек, включающий JAXP 1.4, JAXB 2.2a и JAX-WS 2.2 и другие[20].

За 5 дней до выхода релиза Java Standard Edition 7 было обнаружено несколько серьёзных ошибок в горячей оптимизации циклов, которая включена по умолчанию и приводит виртуальную машину Java к краху. Специалисты Oracle найденные ошибки за столь короткий срок исправить не могли, но пообещали, что они будут исправлены во втором обновлении (Java 7 Update 2) и частично в первом[21].

Список нововведений

  • Поддержка динамически-типизированных языков (InvokeDynamic) — расширение JVM (семантики байт-кода), языка Java[22] для поддержки динамически-типизированных языков.
  • Строгая проверка class-файлов — class-файлы версии 51 (Java Standard Edition 7) или более поздней версии должны быть проверены typechecking-верификатором; JVM не должна переключаться на старый верификатор.
  • Изменение синтаксиса языка Java (Project Coin) — частичные изменения в языке Java, предназначенные для упрощения общих задач программирования:
    • Использование класса String в блоке switch.
    • Закрытие используемых ресурсов в блоке try (try-with-resources) — работает при использовании интерфейса AutoCloseable.
    • Объединённая обработка исключений в блоке catch (multi-catch exceptions) — перечисление обрабатываемых исключений в catch (… | … | …).
    • Повторное выбрасывание исключений (rethrowing exceptions) — передача возникшего исключения «вверх» по стеку вызовов.
    • Подчёркивания в числовых литералах для лучшего восприятия больших чисел.
    • Изменение вывода типа в Java generic при создании объекта.
    • Использование двоичных чисел (binary literals) — префикс «0b» укажет, что используется двоичное число.
    • Упрощение вызова методов varargs — уменьшение предупреждений при вызове метода с переменным числом входящих переменных.
  • Модификация загрузчика классов (class-loader) — избежание тупиковых ситуаций в неиерархической топологии загрузки классов.
  • Закрытие ресурсов, открытых URLClassLoader.
  • Обновление коллекций (JSR 166).
  • Поддержка Unicode 6.0.
  • Отделение языка пользователя и языка пользовательского интерфейса — обновление обработки языков для отделения локали от языка пользовательского интерфейса.
  • Новые интерфейсы I/O для платформы Java (nio.2).
  • Использование JDBC 4.1 и Rowset 1.1.
  • … (не закончено)

Java SE 8

Релиз версии состоялся 19 марта 2014 года. Кодовое имя Spider.

Список нововведений

  • Полноценная поддержка лямбда-выражений.
  • Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию.
  • Ссылки на методы.
  • Функциональные интерфейсы (предикаты, поставщики и т. д.)
  • Потоки (stream) для работы с коллекциями
  • Новое API для работы с датами
  • … (не закончено)

Java SE 9

Список нововведений

  • Интеграция jigsaw.
  • Обновление Process API для лучшего взаимодействия с не-Java процессами операционной системы.
  • Новый HTTP-клиент с поддержкой HTTP 2.0, веб-сокетов и заменой устаревшему HttpURLConnection.
  • … (не закончено)

Классификация платформ Java

Внутри Java существует несколько основных семейств технологий:

  • Java SE — Java Standard Edition, основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь — для настольных систем.
  • Java EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия.
  • Java ME — Java Micro Edition, создана для использования в устройствах, ограниченных по вычислительной мощности, например, в мобильных телефонах, КПК, встроенных системах;
  • JavaFX — технология, являющаяся следующим шагом в эволюции Java как Rich Client Platform; предназначена для создания графических интерфейсов корпоративных приложений и бизнеса.
  • Java Card — технология предоставляет безопасную среду для приложений, работающих на смарт-картах и других устройствах с очень ограниченным объёмом памяти и возможностями обработки.

Java и Microsoft

Компанией Microsoft была разработана собственная реализация JVM (MSJVM[23]), включавшаяся в состав различных операционных систем, начиная с Windows 98 (также входила в Internet Explorer от версии 3 и выше, что позволяло использовать MSJVM (Microsoft java virtual machine) в ОС Windows 95 и Windows NT 4 после установки IE3+ на данные ОС).

MSJVM имела существенные отличия от Sun Java, во многом ломающие основополагающую концепцию переносимости программ между разными платформами:

Тесная интеграция Java с DCOM и Win32 поставила под вопрос кроссплатформенную парадигму языка. Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В конечном счёте между двумя компаниями была достигнута договорённость о возможности продления срока официальной поддержки пользователей нестандартной Microsoft JVM до конца 2007 года[23].

В 2005 году компанией Microsoft для платформы .NET был представлен Java-подобный язык J#, не соответствующий официальной спецификации языка Java и исключённый впоследствии из стандартного инструментария разработчика Microsoft Visual Studio, начиная с Visual Studio 2008[24].

Java и Android

Язык Java активно используется для создания мобильных приложений под операционную систему Android. При этом программы компилируются в нестандартный байт-код, для использования их виртуальной машиной Dalvik (начиная с Android 5.0 Lollipop виртуальная машина заменена на ART). Для такой компиляции используется дополнительный инструмент, а именно Android SDK (Software Development Kit), разработанный компанией Google.

Разработку приложений можно вести в среде Android Studio, NetBeans, в среде Eclipse, используя при этом плагин Android Development Tools (ADT), или в IntelliJ IDEA. Версия JDK при этом должна быть 5.0 или выше.

8 декабря 2014 года Android Studio признана компанией Google официальной средой разработки под ОС Android.

Применения платформы Java

Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: RuneScape, Amazon[25][26], eBay[27][28], LinkedIn[29], Yahoo![30].

Следующие компании в основном фокусируются на Java (J2EE) технологиях: SAP, IBM, Oracle. В частности, СУБД Oracle Database включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры[31].

Производительность

Программы, написанные на Java, имеют репутацию более медленных и занимающих больше оперативной памяти, чем написанные на языке C[12]. Тем не менее, скорость выполнения программ, написанных на языке Java, была существенно улучшена с выпуском в 1997—1998 годах так называемого JIT-компилятора в версии 1.1 в дополнение к другим особенностям языка для поддержки лучшего анализа кода (такие, как внутренние классы, класс StringBuffer, упрощенные логические вычисления и т. д.). Кроме того, была произведена оптимизация виртуальной машины Java — с 2000 года для этого используется виртуальная машина HotSpot. По состоянию на февраль 2012 года, код Java 7 приблизительно в 1.8 раза медленнее кода, написанного на языке Си[32].

Некоторые платформы предлагают аппаратную поддержку выполнения для JavaК:Википедия:Статьи без источников (тип: не указан)[источник не указан 4582 дня]. К примеру, микроконтроллеры, выполняющие код Java на аппаратном обеспечении вместо программной JVM, а также основанные на ARM процессоры, которые поддерживают выполнение байткода Java через опцию Jazelle.

Основные возможности

  • автоматическое управление памятью;
  • расширенные возможности обработки исключительных ситуаций;
  • богатый набор средств фильтрации ввода-вывода;
  • набор стандартных коллекций: массив, список, стек и т. п.;
  • наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI);
  • наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
  • встроенные в язык средства создания многопоточных приложений, которые потом были портированы на многие языки (например, python);
  • унифицированный доступ к базам данных:
  • на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;
  • на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects (англ.) и Java Persistence API;
  • поддержка обобщений (начиная с версии 1.5);
  • поддержка лямбд, замыканий, встроенные возможности функционального программирования (с 1.8);
  • множество вариантов реализации многопоточных программ [что?].

Пространство имён

Идея пространств имён воплощена в Java-пакетах.

Внутри пакета есть два независимых пространства имен: переменные и методы.

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

Generics:

Reflection:

Аннотаций:

Основные идеи

Примитивные типы

В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double. Существует также вспомогательный девятый примитивный тип — void, однако переменные и поля такого типа не могут быть объявлены в коде, а сам тип используется только для описания соответствующего ему класса, для использования при рефлексии. Кроме того, с помощью класса [java.sun.com/javase/6/docs/api/java/lang/Void.html Void] можно узнать, является ли определённый метод типа void: Hello.class.getMethod("main", Array.newInstance(String.class, 0).getClass()).getReturnType() == Void.TYPE.

Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией, и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причём в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения <math>+\infty</math>, <math>-\infty</math> и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float — так же, но с приставкой Float вместо Double. Минимальные и максимальные значения, принимаемые типами float и double, тоже стандартизованы.

Тип Длина (в байтах) Диапазон или набор значений
boolean 1 в массивах, 4 в переменных[33] true, false
byte 1 −128..127
char 2 0..216−1, или 0..65535
short 2 −215..215−1, или −32768..32767
int 4 −231..231−1, или −2147483648..2147483647
long 8 −263..263−1, или примерно −9.2·1018..9.2·1018
float 4 -(2-2−23)·2127..(2-2−23)·2127, или примерно −3.4·1038..3.4·1038, а также <math>-\infty</math>, <math>\infty</math>, NaN
double 8 -(2-2−52)·21023..(2-2−52)·21023, или примерно −1.8·10308..1.8·10308, а также <math>-\infty</math>, <math>\infty</math>, NaN

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

Преобразования при математических операциях

В языке Java действуют следующие правила:

  1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.
  2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
  3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
  4. Иначе оба операнда преобразуются к типу int.

Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++[34].

Объектные переменные, объекты, ссылки и указатели

В языке Java имеются только динамически создаваемые объекты. Причём переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать:

double a[10][20];
Foo b(30);

а нужно:

double[][] a = new double[10][20];
Foo b = new Foo(30);

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

Объектными являются переменные любого типа, кроме примитивного. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:

  • Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот.
  • Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции.
  • Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности.
  • В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»). Однако для булевых типов одиночный амперсанд означает «логическое и», отличающееся от двойного тем, что цепь проверок не прекращается при получении в выражении значения false[35] (напр. a == b && foo() == bar() не повлечёт вызовов foo() и bar() в случае, если a != b, тогда как использование & повлечёт в любом случае.

Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов (хотя определено значение ссылки, не указывающей ни на что: null).

Если нужен указатель на примитивный тип, используются классы-обёртки примитивных типов: [java.sun.com/javase/6/docs/api/java/lang/Boolean.html Boolean], [java.sun.com/javase/6/docs/api/java/lang/Byte.html Byte], [java.sun.com/javase/6/docs/api/java/lang/Character.html Character], [java.sun.com/javase/6/docs/api/java/lang/Short.html Short], [java.sun.com/javase/6/docs/api/java/lang/Integer.html Integer], [java.sun.com/javase/6/docs/api/java/lang/Long.html Long], [java.sun.com/javase/6/docs/api/java/lang/Float.html Float], [java.sun.com/javase/6/docs/api/java/lang/Double.html Double].

Дублирование ссылок и клонирование

Из-за того, что объектные переменные являются ссылочными, при присваивании не происходит копирования объекта. Так, если написать

Foo foo, bar;
…
bar = foo;

то произойдет копирование адреса из переменной foo в переменную bar. То есть foo и bar будут указывать на одну и ту же область памяти, то есть на один и тот же объект; попытка изменить поля объекта, на который ссылается переменная foo, будет менять объект, с которым связана переменная bar, и наоборот. Если же необходимо получить именно ещё одну копию исходного объекта, пользуются или методом (функцией-членом, в терминологии C++) clone (), создающим копию объекта, или (реже) копирующим конструктором (конструкторы в Java не могут быть виртуальными, поэтому экземпляр класса-потомка будет неправильно скопирован конструктором класса-предка; метод клонирования вызывает нужный конструктор и тем самым позволяет обойти это ограничение).

Метод clone() требует, чтобы класс реализовывал интерфейс Cloneable (об интерфейсах см. ниже). Если класс реализует интерфейс Cloneable, по умолчанию clone() копирует все поля (мелкая копия). Если требуется не копировать, а клонировать поля (а также их поля и так далее), надо переопределять метод clone(). Определение и использование метода clone() часто является нетривиальной задачей[36].

Инициализация переменных

Все переменные или требуют явного определения, или автоматически заполняются нулями (0, null, массивом нулей). Таким образом, исчезают гейзенбаги, связанные со случайным использованием неинициализированной памяти, характерные для низкоуровневых языков вроде C.

Сборка мусора

В языке Java невозможно явное удаление объекта из памяти — вместо этого реализована Сборка мусора. ТрадиционнымК:Википедия:Статьи без источников (тип: не указан)[источник не указан 5271 день] приёмом, дающим сборщику мусора «намёк» на освобождение памяти, является присваивание переменной пустого значения null. Это, однако, не значит, что объект, заменённый значением null, будет непременно и немедленно удалён, но есть гарантия, что этот объект будет удалён именно в будущем. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.

Классы и функции

Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где нет понятий «функция» или «функция-член» (англ. member function), а только метод. В методы превратились и стандартные функции. Например, в Java нет функции sin(), а есть метод Math.sin() класса Math (содержащего, кроме sin(), методы cos(), exp(), sqrt(), abs() и многие другие). Конструкторы в Java не считаются методами. Деструкторов в Java не существует, а метод finalize() ни в коем случае нельзя считать аналогом деструктора.

Конструкторы

Конструктор — это специальный метод, который обязательно вызывается при создании нового объекта, то есть объект (экземпляр класса) не может быть создан без вызова конструктора класса. Не всегда удобно инициализировать все переменные класса при создании его экземпляра, поэтому переменные экземпляра часто объявляют внутри тела конструктора, а инициализируют как аргументы конструктора при создании экземпляра класса. Иногда проще, чтобы какие-то значения были бы созданы по умолчанию при создании объекта. В таком случае переменные объявляются и инициализируются внутри тела конструктора.

Конструктор инициализирует объект непосредственно во время создания. Имя конструктора совпадает с именем класса, включая регистр, а по синтаксису конструктор похож на метод без возвращаемого значения.
private int Cat();  // так выглядит метод по имени Cat
Cat();              // так выглядит конструктор класса Cat
В отличие от метода, конструктор никогда ничего не возвращает.

Конструктор определяет действия, выполняемые при создании объекта класса, и является важной частью класса. Как правило, программисты стараются явно указать конструктор. Если явного конструктора нет, то Java автоматически создаст его (пустым) для использования по умолчанию.

Создадим класс Box с конструктором, который просто установит начальные значения для коробки.
class Box {
    int width; // ширина коробки
    int height; // высота коробки
    int depth; // глубина коробки
	
    // Конструктор
    Box(int a, int b) {
        width = a;
        height = b;
        depth = 10;
    }

    // вычисляем объём коробки
    int getVolume() {
    	return width * height * depth;
    }
}

Статические методы и поля

В Java (как и в C++) используются статические поля и статические методы (англ. static method — в теории программирования их также называют методами класса), которые задаются при помощи ключевого слова static. Статические поля (переменные класса) имеют тот же смысл, что и в C++: каждое такое поле является собственностью класса, поэтому для доступа к статическим полям не требуется создавать экземпляры соответствующего класса.

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

double x = Math.sin(1);

вместо

Math m = new Math();
double x = m.sin(1);

Поскольку статические методы существуют независимо от объектов (экземпляров класса), они не имеют доступа к обычным (не статическим) полям и методам данного класса. В частности, при реализации статического метода недопустимо использовать идентификатор this.

Благодаря возможности статического импорта, возможно также вызывать статические функции и константы без указания класса, чтобы вместо кода

double x = Math.sin(Math.tan(Math.sqrt(y)) + Math.floor(24.5)) + Math.cos(42 * Math.PI);

писать код

import static java.lang.Math.*;
...
double x = sin(tan(sqrt(y)) + floor(24.5)) + cos(42 * PI);

Завершённость (final)

Ключевое слово final (финальный) имеет разные значения при описании поля, метода или класса.

  1. Финальное поле класса инициализируется при описании или в конструкторе класса (а статическое поле — в статическом блоке инициализации). Впоследствии его значение не может быть изменено. Если статическое поле класса или переменная проинициализированы константным выражением, они рассматриваются компилятором как именованная константа; в таком случае их значение может быть использовано в операторах switch (для констант типа int), а также для условной компиляции (для констант типа boolean) при использовании с оператором if.
  2. Значения локальных переменных, а также параметров метода, помеченных ключевым словом final, не могут быть изменены после присвоения. При этом их значения могут использоваться внутри анонимных классов.
  3. Метод класса, отмеченный словом final, не может быть переопределён при наследовании.
  4. Финальный класс не может иметь наследников.

Абстрактность

В Java методы, не объявленные явно как static, final или private, являются виртуальными в терминологии C++: при вызове метода, по-разному определённого в базовом и наследующем классах, всегда производится проверка времени выполнения.

Абстрактным методом (модификатор abstract) в Java называется метод, для которого заданы параметры и тип возвращаемого значения, но не задано тело. Абстрактный метод определяется в классах-наследниках. Аналог абстрактного метода в C++ — чисто виртуальная функция (pure virtual function). Для того чтобы в классе можно было описывать абстрактные методы, сам класс тоже должен быть описан как абстрактный. Объекты абстрактного класса создавать нельзя.

Интерфейсы

Высшей степенью абстрактности в Java является интерфейс (модификатор interface). Все методы интерфейса абстрактны: описатель abstract даже не требуется. Интерфейс в Java не считается классом, хотя, по сути, является полностью абстрактным классом. Класс может наследовать/расширять (extends) другой класс или реализовывать (implements) интерфейс. Кроме того, интерфейс может наследовать/расширять другой интерфейс.

В Java класс не может наследовать более одного класса, зато может реализовывать несколько интерфейсов. Множественное наследование интерфейсов не запрещено, то есть один интерфейс может наследоваться от нескольких.

Интерфейсы можно использовать в качестве типов параметров методов. Нельзя создавать экземпляры интерфейсов.

Маркерные интерфейсы

В Java есть интерфейсы, которые не содержат методов для реализации, а специальным образом обрабатываются JVM:

  • java.lang.Cloneable
  • java.io.Serializable
  • java.util.RandomAccess
  • java.rmi.Remote

Шаблоны в Java (generics)

Начиная с версии Java 5 в языке появился механизм обобщённого программирования — шаблоны, внешне близкие к шаблонам C++. С помощью специального синтаксиса в описании классов и методов можно указать параметры-типы, которые внутри описания могут использоваться в качестве типов полей, параметров и возвращаемых значений методов.

// Объявление обобщённого класса
class GenericClass<E> {
  E getFirst() { ... }
  void add(E obj) { ... }
}

// Использование обобщённого класса в коде
GenericClass<String> var = new GenericClass<String>();
var.add("qwerty");
String p = var.getFirst();

Допускается обобщённое объявление классов, интерфейсов и методов. Кроме того, синтаксис поддерживает ограниченные объявления типов-параметров: указание в объявлении конструкции вида <T extends A & B & C...> требует, чтобы тип-параметр T реализовывал интерфейсы A, B, C и так далее, а конструкция <T super C> требует, чтобы тип-параметр T был типом C или одним из его предков.

В отличие от шаблонов C#, шаблоны Java не поддерживаются средой исполнения — компилятор просто создаёт байт-код, в котором никаких шаблонов уже нет. Реализация шаблонов в Java принципиально отличается от реализации аналогичных механизмов в C++: компилятор не порождает для каждого случая использования шаблона отдельный вариант класса или метода-шаблона, а просто создаёт одну реализацию байт-кода, содержащую необходимые проверки и преобразования типов. Это приводит к ряду ограничений использования шаблонов в программах на Java.

Проверка принадлежности к классу

В Java можно явно проверить, к какому классу принадлежит объект. Выражение foo instanceof Foo истинно, если объект foo принадлежит классу Foo или его наследнику, или реализует интерфейс Foo (или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo).

Далее функция getClass(), определённая для всех объектов, выдаёт объект типа Class. Для каждого класса создаётся не более одного описывающего его объекта типа Class, поэтому эти объекты можно сравнивать. Так, например, foo.getClass() == bar.getClass() будет истинно, если объекты foo и bar принадлежат к одному классу.

Кроме того, объект типа Class любого типа можно получить так: Integer.class, Object.class.

Прямое сравнение классов не всегда является оптимальным средством проверки на принадлежность к классу. Зачастую вместо него используют функцию isAssignableFrom(). Эта функция определена у объекта типа Class и принимает объект типа Class в качестве параметра. Таким образом, вызов Foo.class.isAssignableFrom(Bar.class) вернёт true в случае, если Foo является предком класса Bar. Так как все объекты являются потомками типа Object, вызов Object.class.isAssignableFrom() всегда вернёт true.

В паре с упомянутыми функциями объекта типа Class используются также функции isInstance() (эквивалентно instanceof), а также cast() (преобразует параметр в объект выбранного класса).

Средства разработки ПО

  • JDK — помимо набора библиотек для платформ Java SE и Java EE, содержит компилятор командной строки javac и набор утилит, также работающих в режиме командной строки.
  • NetBeans IDE — свободная интегрированная среда разработки для всех платформ Java — Java ME, Java SE и Java EE. Пропагандируется Oracle, владельцем технологии Java, как базовое средство для разработки ПО на языке Java и других языках (C, C++, PHP, Fortran и др.).
  • Eclipse IDE — свободная интегрированная среда разработки для Java SE, Java EE и Java ME[37]. Пропагандируется IBM, одним из важнейших разработчиков корпоративного ПО, как базовое средство для разработки ПО на языке Java и других языках (C, C++, Ruby, Fortran и др.).
  • IntelliJ IDEA — среда разработки для платформ Java SE, Java EE и Java ME. Разработчик — компания JetBrains. Распространяется в двух версиях: свободной бесплатной (Community Edition) и коммерческой проприетарной (Ultimate Edition).
  • JDeveloper — среда разработки для платформ Java SE, Java EE и Java ME. Разработчик — компания Oracle.
  • BlueJ — среда разработки программного обеспечения на языке Java, созданная в основном для использования в обучении, но также подходящая для разработки небольших программ.
  • Java для iOS — обучающее приложение и компилятор для iOS.
  • Geany — свободная среда разработки программного обеспечения, написанная с использованием библиотеки GTK2.

См. также

Напишите отзыв о статье "Java"

Примечания

  1. [www.oracle.com/technetwork/java/javase/downloads/index.html Oracle Official Website]
  2. [cs.gmu.edu/~sean/stuff/java-objc.html Java Was Strongly Influenced by Objective-C]
  3. [java.sun.com/docs/white/delegates.html White Paper. About Microsoft’s «Delegates»] Официальный сайт
  4. [www.fscript.org/prof/javapassport.pdf History of Java in Java Application Servers Report] TechMetrix Research, 1999
  5. Идея динамической кодогенерации взята из диссертации ученика Вирта Микаэля Франца ([www.ict.edu.ru/ft/004790/obe_fate.pdf PC World Russia CD, September 2005])
  6. [www.oberon2005.oberoncore.ru/r260905.html Лекция Н. Вирта в Нижегородском государственном университете им. Н. И. Лобачевского]
  7. В Java 5.0 было добавлено несколько новых особенностей (foreach, autoboxing, varargs и аннотаций), после того, как они были введены в аналогичный (и конкурирующий) язык C#; см.: www.barrycornelius.com/papers/java5/ www.levenez.com/lang/
  8. Gosling, McGilton. [java.sun.com/docs/white/langenv/Intro.doc1.html#943 The Java Language Environment]. Официальный сайт (май 1996). Проверено ???. [www.webcitation.org/6170iD8ff Архивировано из первоисточника 22 августа 2011].
  9. J. Gosling, B. Joy, G. Steele, G. Brachda. [java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#237601 The Java Language Specification, 2nd Edition]. Официальный сайт. Проверено ???. [www.webcitation.org/6170inw46 Архивировано из первоисточника 22 августа 2011].
  10. [www.computerworld.com.au/index.php/id;1422447371;pp;3;fp;4194304;fpid;1 The A-Z of Programming Languages: Modula-3 — a-z of programming languages — Computerworld]
  11. Произносится на английском как /ˈdʒɑːvə/, в русском языке встречаются транслитерации «Джава» и «Ява», правообладатели торговой марки предпочитают первую транслитерацию.
  12. 1 2 [shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java Java 6 -server speed ÷ C++ GNU g++ speed | Computer Language Benchmarks Game]
  13. Metz, Cade. [www.theregister.co.uk/2011/06/03/google_paper_on_cplusplus_java_scala_go/ Google pits C++ against Java, Scala, and Go] (англ.). The Register (3 June 2011). Проверено 5 июня 2011. [www.webcitation.org/6170nFPxZ Архивировано из первоисточника 22 августа 2011].
  14. [days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf Loop Recognition in C++/Java/Go/Scala] (PDF, 0.3 МБ)
  15. [www.opennet.ru/opennews/art.shtml?num=30784 В Google провели сравнение производительности C++, Java, Go и Scala]
  16. Robert Tolksdorf. [www.is-research.de/info/vmlanguages/ Programming languages for the Java Virtual Machine JVM] (англ.). is-research GmbH. — Онлайн-каталог альтернативных языков и языковых расширений для JVM. Проверено 5 июня 2009. [www.webcitation.org/6170nqDc9 Архивировано из первоисточника 22 августа 2011].
  17. [java.sun.com/performance/reference/whitepapers/6_performance.html#2.3 Результаты тестов]
  18. [openjdk.java.net/projects/jdk7/ план разработки для JDK7]
  19. [mreinhold.org/blog/plan-b План Б]
  20. [citforum.ru/news/26682/ Компания Oracle анонсировала выход Java Standard Edition 7] (рус.)
  21. [www.lucidimagination.com/search/document/1a0d3986e48a9348/warning_index_corruption_and_crashes_in_apache_lucene_core_apache_solr_with_java_7 Index corruption and crashes in Apache Lucene Core / Apache Solr with Java 7] (англ.)
  22. [ntv.ifmo.ru/ru/article/515/aktornoe_rasshirenie_yazyka_JAVA_v_srede_MPS.htm Акторное расширение языка Java в среде MPS]. — вестник ИТМО. — Вып 6 (94)
  23. 1 2 [www.microsoft.com/About/Legal/EN/US/Interoperability/Java/Default.aspx Microsoft Java Virtual Machine Support] (англ.). Microsoft (12 сентября 2003). — Официальное заявление Microsoft о программе поддержки MSJVM. Проверено 9 октября 2010. [www.webcitation.org/6170oubDn Архивировано из первоисточника 22 августа 2011].
  24. [msdn.microsoft.com/ru-ru/library/7xsxf8e2%28VS.90%29.aspx Visual J#] (рус.). Microsoft (ноябрь 2007). — Официальная информация Microsoft об исключении J# из комплекта Visual Studio 2008. Проверено 10 октября 2010. [www.webcitation.org/6170pJXt3 Архивировано из первоисточника 22 августа 2011].
  25. Todd Hoff. [highscalability.com/amazon-architecture Amazon Architecture] (англ.) (18 сентября 2007). — Обсуждение архитектуры Amazon с использованием Java-технологий. Проверено 6 июня 2009.
  26. [aws.amazon.com/ec2/ Amazon Elastic Compute Cloud (Amazon EC2)] (англ.). Amazon Web Services LLC. — Описание технологии и возможностей Amazon EC2 как веб-сервиса. Проверено 6 июня 2009. [www.webcitation.org/6170rMoFx Архивировано из первоисточника 22 августа 2011].
  27. Todd Hoff. [highscalability.com/ebay-architecture eBay Architecture] (англ.) (27 мая 2008). — Обсуждение архитектуры eBay на платформе Java. Проверено 6 сентября 2009. [www.webcitation.org/6170rzVA7 Архивировано из первоисточника 22 августа 2011].
  28. Randy Shoup, Dan Pritchett. [www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf The eBay Architecture] (англ.). SD Forum 2006.  ??? (29 ноября 2006). — Презентация по истории развития архитектуры eBay. Проверено 6 июня 2009. [www.webcitation.org/6170saktV Архивировано из первоисточника 22 августа 2011].
  29. Brian Guan. [blog.linkedin.com/2008/06/11/grails-at-linkedin/ The LinkedIn Blog. Blog Archive. Grails at LinkedIn] (англ.). LinkedIn.com (11 июня 2008). — История создания системы LinkedIn на основе Java-технологии Grails. Проверено 5 июня 2009. [www.webcitation.org/6170ueU7e Архивировано из первоисточника 22 августа 2011].
  30. [developer.yahoo.com/hadoop/ Hadoop and Distributed Computing at Yahoo!] (англ.). Yahoo!. — Стартовая страница Java-технологии распределённого обслуживания Hadoop на портале разработчиков Yahoo!. Проверено 21 июня 2009. [www.webcitation.org/6170vguJb Архивировано из первоисточника 22 августа 2011].
  31. [www.oracle.com/technology/tech/java/jsp/index.html OracleJVM and Java Stored Procedures] (англ.). Oracle Inc.. — Раздел портала Oracle, посвящённый технологиям Java в составе сервера СУБД Oracle. Проверено 5 июня 2009. [www.webcitation.org/6170wCzk5 Архивировано из первоисточника 22 августа 2011].
  32. [shootout.alioth.debian.org/u32q/which-programming-languages-are-fastest.php?gcc=on&javasteady=on&java=on&csharp=on&javaxint=on&calc=chart Ubuntu: Intel® Q6600® quad-core Computer Language Benchmarks]. [www.webcitation.org/68bfPITT0 Архивировано из первоисточника 22 июня 2012].
  33. JVM не имеет поддержки для переменных типа boolean, поэтому они представляются в виде значений типа int. Однако массивы boolean[] поддерживаются. [java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#22909 VM Spec The Structure of the Java Virtual Machine]
  34. Бьярн Страуструп. Язык программирования С++ = The C++ Programming Language. — М.—СПб.: Бином, Невский диалект, 2008. — 1104 с. — 5000 экз. — ISBN 5-7989-0226-2; ISBN 5-7940-0064-3; ISBN 0-201-70073-5.
  35. Java Language Specification Third Edition — java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.22.2
  36. [java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#clone() Object (Java 2 Platform Standart Edition версии 1.4.2)] (англ.). Sun Microsystems. — Ссылка на документацию к методу Object.clone(). Проверено 6 сентября 2009. [www.webcitation.org/6170x2NN3 Архивировано из первоисточника 22 августа 2011].
  37. [www.eclipse.org/pulsar/ Pulsar - Eclipse Mobile Tools Platform] (англ.). Eclipse. — Проект eclipse для мобильных разработчиков. Проверено 23 марта 2011. [www.webcitation.org/6170xVuSz Архивировано из первоисточника 22 августа 2011].

Литература

  • Герберт Шилдт. Java 8. Полное руководство, 9-е издание = Java 8. The Complete Reference, 9th Edition. — М.: «Вильямс», 2015. — 1376 с. — ISBN 978-5-8459-1918-2.
  • Кей С. Хорстманн. Java SE 8. Вводный курс = Java SE 8 for the Really Impatient. — М.: «Вильямс», 2014. — 208 с. — ISBN 978-5-8459-1900-7.
  • Фрэд Лонг, Дхрув Мохиндра, Роберт С. Сикорд, Дин Ф. Сазерленд, Дэвид Свобода. Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищённых программ = Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs. — М.: «Вильямс», 2014. — 256 с. — ISBN 978-5-8459-1897-0.
  • Кей С. Хорстманн, Гари Корнелл. Java. Библиотека профессионала, том 1. Основы. 9-е издание = Core Java, Volume I: Fundamentals (9th Edition). — М.: «Вильямс», 2013. — 864 с. — ISBN 978-5-8459-1869-7.
  • Барри Берд. Java 8 для чайников = Java For Dummies, 6th edition. — М.: «Диалектика», 2015. — 400 с. — ISBN 978-5-8459-1928-1.
  • Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Брача, Алекс Бакли. Язык программирования Java SE 8. Подробное описание, 5-е издание = The Java Language Specification, Java SE 8 Edition (5th Edition) (Java Series). — М.: «Вильямс», 2015. — 672 с. — ISBN 978-5-8459-1875-8.
  • Джошуа Блох. Java. Эффективное программирование = Effective Java. — М.: Лори, 2002. — 224 с. — ISBN 5-85582-169-2.
  • Монахов Вадим. Язык программирования Java и среда NetBeans. — 3-е изд. — СПб.: БХВ-Петербург, 2011. — 704 с. — ISBN 978-5-9775-0671-7.
  • Брюс Эккель. Философия Java = Thinking in Java. — 3-е изд. — СПб.: Питер, 2003. — 976 с. — ISBN 5-88782-105-1.

Ссылки

В Викисловаре есть статья «java»
  • [java.com/ru/download/manual.jsp Автономный установщик последней версии Java]
  • [www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html 7 версия Java]
  • [www.oracle.com/technetwork/java/archive-139210.html Архив всех версий]
  • [java.sun.com/ Официальный сайт]
  • [mindview.net/Books/DownloadSites Bruce Eckel’s Free Electronic Books] (англ.) — свободно распространяемые электронные версии книг Брюса Эккеля по C++ и Java вместе с исходным кодом
  • W. Kahan, Joseph D. Darcy. [www.eecs.berkeley.edu/~wkahan/JAVAhurt.pdf How Java’s Floating-Point Hurts Everyone Everywhere]
  • [docs.oracle.com/javase/6/docs/api/overview-summary.html Java™ Platform, Standard Edition 6 API Specification]
  • [urvanov.ru/2016/03/23/%d1%83%d1%87%d0%b5%d0%b1%d0%bd%d0%b8%d0%ba-java-8/ Учебник Java 8]

Отрывок, характеризующий Java


Девять дней после оставления Москвы в Петербург приехал посланный от Кутузова с официальным известием об оставлении Москвы. Посланный этот был француз Мишо, не знавший по русски, но quoique etranger, Busse de c?ur et d'ame, [впрочем, хотя иностранец, но русский в глубине души,] как он сам говорил про себя.
Государь тотчас же принял посланного в своем кабинете, во дворце Каменного острова. Мишо, который никогда не видал Москвы до кампании и который не знал по русски, чувствовал себя все таки растроганным, когда он явился перед notre tres gracieux souverain [нашим всемилостивейшим повелителем] (как он писал) с известием о пожаре Москвы, dont les flammes eclairaient sa route [пламя которой освещало его путь].
Хотя источник chagrin [горя] г на Мишо и должен был быть другой, чем тот, из которого вытекало горе русских людей, Мишо имел такое печальное лицо, когда он был введен в кабинет государя, что государь тотчас же спросил у него:
– M'apportez vous de tristes nouvelles, colonel? [Какие известия привезли вы мне? Дурные, полковник?]
– Bien tristes, sire, – отвечал Мишо, со вздохом опуская глаза, – l'abandon de Moscou. [Очень дурные, ваше величество, оставление Москвы.]
– Aurait on livre mon ancienne capitale sans se battre? [Неужели предали мою древнюю столицу без битвы?] – вдруг вспыхнув, быстро проговорил государь.
Мишо почтительно передал то, что ему приказано было передать от Кутузова, – именно то, что под Москвою драться не было возможности и что, так как оставался один выбор – потерять армию и Москву или одну Москву, то фельдмаршал должен был выбрать последнее.
Государь выслушал молча, не глядя на Мишо.
– L'ennemi est il en ville? [Неприятель вошел в город?] – спросил он.
– Oui, sire, et elle est en cendres a l'heure qu'il est. Je l'ai laissee toute en flammes, [Да, ваше величество, и он обращен в пожарище в настоящее время. Я оставил его в пламени.] – решительно сказал Мишо; но, взглянув на государя, Мишо ужаснулся тому, что он сделал. Государь тяжело и часто стал дышать, нижняя губа его задрожала, и прекрасные голубые глаза мгновенно увлажились слезами.
Но это продолжалось только одну минуту. Государь вдруг нахмурился, как бы осуждая самого себя за свою слабость. И, приподняв голову, твердым голосом обратился к Мишо.
– Je vois, colonel, par tout ce qui nous arrive, – сказал он, – que la providence exige de grands sacrifices de nous… Je suis pret a me soumettre a toutes ses volontes; mais dites moi, Michaud, comment avez vous laisse l'armee, en voyant ainsi, sans coup ferir abandonner mon ancienne capitale? N'avez vous pas apercu du decouragement?.. [Я вижу, полковник, по всему, что происходит, что провидение требует от нас больших жертв… Я готов покориться его воле; но скажите мне, Мишо, как оставили вы армию, покидавшую без битвы мою древнюю столицу? Не заметили ли вы в ней упадка духа?]
Увидав успокоение своего tres gracieux souverain, Мишо тоже успокоился, но на прямой существенный вопрос государя, требовавший и прямого ответа, он не успел еще приготовить ответа.
– Sire, me permettrez vous de vous parler franchement en loyal militaire? [Государь, позволите ли вы мне говорить откровенно, как подобает настоящему воину?] – сказал он, чтобы выиграть время.
– Colonel, je l'exige toujours, – сказал государь. – Ne me cachez rien, je veux savoir absolument ce qu'il en est. [Полковник, я всегда этого требую… Не скрывайте ничего, я непременно хочу знать всю истину.]
– Sire! – сказал Мишо с тонкой, чуть заметной улыбкой на губах, успев приготовить свой ответ в форме легкого и почтительного jeu de mots [игры слов]. – Sire! j'ai laisse toute l'armee depuis les chefs jusqu'au dernier soldat, sans exception, dans une crainte epouvantable, effrayante… [Государь! Я оставил всю армию, начиная с начальников и до последнего солдата, без исключения, в великом, отчаянном страхе…]
– Comment ca? – строго нахмурившись, перебил государь. – Mes Russes se laisseront ils abattre par le malheur… Jamais!.. [Как так? Мои русские могут ли пасть духом перед неудачей… Никогда!..]
Этого только и ждал Мишо для вставления своей игры слов.
– Sire, – сказал он с почтительной игривостью выражения, – ils craignent seulement que Votre Majeste par bonte de c?ur ne se laisse persuader de faire la paix. Ils brulent de combattre, – говорил уполномоченный русского народа, – et de prouver a Votre Majeste par le sacrifice de leur vie, combien ils lui sont devoues… [Государь, они боятся только того, чтобы ваше величество по доброте души своей не решились заключить мир. Они горят нетерпением снова драться и доказать вашему величеству жертвой своей жизни, насколько они вам преданы…]
– Ah! – успокоенно и с ласковым блеском глаз сказал государь, ударяя по плечу Мишо. – Vous me tranquillisez, colonel. [А! Вы меня успокоиваете, полковник.]
Государь, опустив голову, молчал несколько времени.
– Eh bien, retournez a l'armee, [Ну, так возвращайтесь к армии.] – сказал он, выпрямляясь во весь рост и с ласковым и величественным жестом обращаясь к Мишо, – et dites a nos braves, dites a tous mes bons sujets partout ou vous passerez, que quand je n'aurais plus aucun soldat, je me mettrai moi meme, a la tete de ma chere noblesse, de mes bons paysans et j'userai ainsi jusqu'a la derniere ressource de mon empire. Il m'en offre encore plus que mes ennemis ne pensent, – говорил государь, все более и более воодушевляясь. – Mais si jamais il fut ecrit dans les decrets de la divine providence, – сказал он, подняв свои прекрасные, кроткие и блестящие чувством глаза к небу, – que ma dinastie dut cesser de rogner sur le trone de mes ancetres, alors, apres avoir epuise tous les moyens qui sont en mon pouvoir, je me laisserai croitre la barbe jusqu'ici (государь показал рукой на половину груди), et j'irai manger des pommes de terre avec le dernier de mes paysans plutot, que de signer la honte de ma patrie et de ma chere nation, dont je sais apprecier les sacrifices!.. [Скажите храбрецам нашим, скажите всем моим подданным, везде, где вы проедете, что, когда у меня не будет больше ни одного солдата, я сам стану во главе моих любезных дворян и добрых мужиков и истощу таким образом последние средства моего государства. Они больше, нежели думают мои враги… Но если бы предназначено было божественным провидением, чтобы династия наша перестала царствовать на престоле моих предков, тогда, истощив все средства, которые в моих руках, я отпущу бороду до сих пор и скорее пойду есть один картофель с последним из моих крестьян, нежели решусь подписать позор моей родины и моего дорогого народа, жертвы которого я умею ценить!..] Сказав эти слова взволнованным голосом, государь вдруг повернулся, как бы желая скрыть от Мишо выступившие ему на глаза слезы, и прошел в глубь своего кабинета. Постояв там несколько мгновений, он большими шагами вернулся к Мишо и сильным жестом сжал его руку пониже локтя. Прекрасное, кроткое лицо государя раскраснелось, и глаза горели блеском решимости и гнева.
– Colonel Michaud, n'oubliez pas ce que je vous dis ici; peut etre qu'un jour nous nous le rappellerons avec plaisir… Napoleon ou moi, – сказал государь, дотрогиваясь до груди. – Nous ne pouvons plus regner ensemble. J'ai appris a le connaitre, il ne me trompera plus… [Полковник Мишо, не забудьте, что я вам сказал здесь; может быть, мы когда нибудь вспомним об этом с удовольствием… Наполеон или я… Мы больше не можем царствовать вместе. Я узнал его теперь, и он меня больше не обманет…] – И государь, нахмурившись, замолчал. Услышав эти слова, увидав выражение твердой решимости в глазах государя, Мишо – quoique etranger, mais Russe de c?ur et d'ame – почувствовал себя в эту торжественную минуту – entousiasme par tout ce qu'il venait d'entendre [хотя иностранец, но русский в глубине души… восхищенным всем тем, что он услышал] (как он говорил впоследствии), и он в следующих выражениях изобразил как свои чувства, так и чувства русского народа, которого он считал себя уполномоченным.
– Sire! – сказал он. – Votre Majeste signe dans ce moment la gloire de la nation et le salut de l'Europe! [Государь! Ваше величество подписывает в эту минуту славу народа и спасение Европы!]
Государь наклонением головы отпустил Мишо.


В то время как Россия была до половины завоевана, и жители Москвы бежали в дальние губернии, и ополченье за ополченьем поднималось на защиту отечества, невольно представляется нам, не жившим в то время, что все русские люди от мала до велика были заняты только тем, чтобы жертвовать собою, спасать отечество или плакать над его погибелью. Рассказы, описания того времени все без исключения говорят только о самопожертвовании, любви к отечеству, отчаянье, горе и геройстве русских. В действительности же это так не было. Нам кажется это так только потому, что мы видим из прошедшего один общий исторический интерес того времени и не видим всех тех личных, человеческих интересов, которые были у людей того времени. А между тем в действительности те личные интересы настоящего до такой степени значительнее общих интересов, что из за них никогда не чувствуется (вовсе не заметен даже) интерес общий. Большая часть людей того времени не обращали никакого внимания на общий ход дел, а руководились только личными интересами настоящего. И эти то люди были самыми полезными деятелями того времени.
Те же, которые пытались понять общий ход дел и с самопожертвованием и геройством хотели участвовать в нем, были самые бесполезные члены общества; они видели все навыворот, и все, что они делали для пользы, оказывалось бесполезным вздором, как полки Пьера, Мамонова, грабившие русские деревни, как корпия, щипанная барынями и никогда не доходившая до раненых, и т. п. Даже те, которые, любя поумничать и выразить свои чувства, толковали о настоящем положении России, невольно носили в речах своих отпечаток или притворства и лжи, или бесполезного осуждения и злобы на людей, обвиняемых за то, в чем никто не мог быть виноват. В исторических событиях очевиднее всего запрещение вкушения плода древа познания. Только одна бессознательная деятельность приносит плоды, и человек, играющий роль в историческом событии, никогда не понимает его значения. Ежели он пытается понять его, он поражается бесплодностью.
Значение совершавшегося тогда в России события тем незаметнее было, чем ближе было в нем участие человека. В Петербурге и губернских городах, отдаленных от Москвы, дамы и мужчины в ополченских мундирах оплакивали Россию и столицу и говорили о самопожертвовании и т. п.; но в армии, которая отступала за Москву, почти не говорили и не думали о Москве, и, глядя на ее пожарище, никто не клялся отомстить французам, а думали о следующей трети жалованья, о следующей стоянке, о Матрешке маркитантше и тому подобное…
Николай Ростов без всякой цели самопожертвования, а случайно, так как война застала его на службе, принимал близкое и продолжительное участие в защите отечества и потому без отчаяния и мрачных умозаключений смотрел на то, что совершалось тогда в России. Ежели бы у него спросили, что он думает о теперешнем положении России, он бы сказал, что ему думать нечего, что на то есть Кутузов и другие, а что он слышал, что комплектуются полки, и что, должно быть, драться еще долго будут, и что при теперешних обстоятельствах ему не мудрено года через два получить полк.
По тому, что он так смотрел на дело, он не только без сокрушения о том, что лишается участия в последней борьбе, принял известие о назначении его в командировку за ремонтом для дивизии в Воронеж, но и с величайшим удовольствием, которое он не скрывал и которое весьма хорошо понимали его товарищи.
За несколько дней до Бородинского сражения Николай получил деньги, бумаги и, послав вперед гусар, на почтовых поехал в Воронеж.
Только тот, кто испытал это, то есть пробыл несколько месяцев не переставая в атмосфере военной, боевой жизни, может понять то наслаждение, которое испытывал Николай, когда он выбрался из того района, до которого достигали войска своими фуражировками, подвозами провианта, гошпиталями; когда он, без солдат, фур, грязных следов присутствия лагеря, увидал деревни с мужиками и бабами, помещичьи дома, поля с пасущимся скотом, станционные дома с заснувшими смотрителями. Он почувствовал такую радость, как будто в первый раз все это видел. В особенности то, что долго удивляло и радовало его, – это были женщины, молодые, здоровые, за каждой из которых не было десятка ухаживающих офицеров, и женщины, которые рады и польщены были тем, что проезжий офицер шутит с ними.
В самом веселом расположении духа Николай ночью приехал в Воронеж в гостиницу, заказал себе все то, чего он долго лишен был в армии, и на другой день, чисто начисто выбрившись и надев давно не надеванную парадную форму, поехал являться к начальству.
Начальник ополчения был статский генерал, старый человек, который, видимо, забавлялся своим военным званием и чином. Он сердито (думая, что в этом военное свойство) принял Николая и значительно, как бы имея на то право и как бы обсуживая общий ход дела, одобряя и не одобряя, расспрашивал его. Николай был так весел, что ему только забавно было это.
От начальника ополчения он поехал к губернатору. Губернатор был маленький живой человечек, весьма ласковый и простой. Он указал Николаю на те заводы, в которых он мог достать лошадей, рекомендовал ему барышника в городе и помещика за двадцать верст от города, у которых были лучшие лошади, и обещал всякое содействие.
– Вы графа Ильи Андреевича сын? Моя жена очень дружна была с вашей матушкой. По четвергам у меня собираются; нынче четверг, милости прошу ко мне запросто, – сказал губернатор, отпуская его.
Прямо от губернатора Николай взял перекладную и, посадив с собою вахмистра, поскакал за двадцать верст на завод к помещику. Все в это первое время пребывания его в Воронеже было для Николая весело и легко, и все, как это бывает, когда человек сам хорошо расположен, все ладилось и спорилось.
Помещик, к которому приехал Николай, был старый кавалерист холостяк, лошадиный знаток, охотник, владетель коверной, столетней запеканки, старого венгерского и чудных лошадей.
Николай в два слова купил за шесть тысяч семнадцать жеребцов на подбор (как он говорил) для казового конца своего ремонта. Пообедав и выпив немножко лишнего венгерского, Ростов, расцеловавшись с помещиком, с которым он уже сошелся на «ты», по отвратительной дороге, в самом веселом расположении духа, поскакал назад, беспрестанно погоняя ямщика, с тем чтобы поспеть на вечер к губернатору.
Переодевшись, надушившись и облив голову холодной подои, Николай хотя несколько поздно, но с готовой фразой: vaut mieux tard que jamais, [лучше поздно, чем никогда,] явился к губернатору.
Это был не бал, и не сказано было, что будут танцевать; но все знали, что Катерина Петровна будет играть на клавикордах вальсы и экосезы и что будут танцевать, и все, рассчитывая на это, съехались по бальному.
Губернская жизнь в 1812 году была точно такая же, как и всегда, только с тою разницею, что в городе было оживленнее по случаю прибытия многих богатых семей из Москвы и что, как и во всем, что происходило в то время в России, была заметна какая то особенная размашистость – море по колено, трын трава в жизни, да еще в том, что тот пошлый разговор, который необходим между людьми и который прежде велся о погоде и об общих знакомых, теперь велся о Москве, о войске и Наполеоне.
Общество, собранное у губернатора, было лучшее общество Воронежа.
Дам было очень много, было несколько московских знакомых Николая; но мужчин не было никого, кто бы сколько нибудь мог соперничать с георгиевским кавалером, ремонтером гусаром и вместе с тем добродушным и благовоспитанным графом Ростовым. В числе мужчин был один пленный итальянец – офицер французской армии, и Николай чувствовал, что присутствие этого пленного еще более возвышало значение его – русского героя. Это был как будто трофей. Николай чувствовал это, и ему казалось, что все так же смотрели на итальянца, и Николай обласкал этого офицера с достоинством и воздержностью.
Как только вошел Николай в своей гусарской форме, распространяя вокруг себя запах духов и вина, и сам сказал и слышал несколько раз сказанные ему слова: vaut mieux tard que jamais, его обступили; все взгляды обратились на него, и он сразу почувствовал, что вступил в подобающее ему в губернии и всегда приятное, но теперь, после долгого лишения, опьянившее его удовольствием положение всеобщего любимца. Не только на станциях, постоялых дворах и в коверной помещика были льстившиеся его вниманием служанки; но здесь, на вечере губернатора, было (как показалось Николаю) неисчерпаемое количество молоденьких дам и хорошеньких девиц, которые с нетерпением только ждали того, чтобы Николай обратил на них внимание. Дамы и девицы кокетничали с ним, и старушки с первого дня уже захлопотали о том, как бы женить и остепенить этого молодца повесу гусара. В числе этих последних была сама жена губернатора, которая приняла Ростова, как близкого родственника, и называла его «Nicolas» и «ты».
Катерина Петровна действительно стала играть вальсы и экосезы, и начались танцы, в которых Николай еще более пленил своей ловкостью все губернское общество. Он удивил даже всех своей особенной, развязной манерой в танцах. Николай сам был несколько удивлен своей манерой танцевать в этот вечер. Он никогда так не танцевал в Москве и счел бы даже неприличным и mauvais genre [дурным тоном] такую слишком развязную манеру танца; но здесь он чувствовал потребность удивить их всех чем нибудь необыкновенным, чем нибудь таким, что они должны были принять за обыкновенное в столицах, но неизвестное еще им в провинции.
Во весь вечер Николай обращал больше всего внимания на голубоглазую, полную и миловидную блондинку, жену одного из губернских чиновников. С тем наивным убеждением развеселившихся молодых людей, что чужие жены сотворены для них, Ростов не отходил от этой дамы и дружески, несколько заговорщически, обращался с ее мужем, как будто они хотя и не говорили этого, но знали, как славно они сойдутся – то есть Николай с женой этого мужа. Муж, однако, казалось, не разделял этого убеждения и старался мрачно обращаться с Ростовым. Но добродушная наивность Николая была так безгранична, что иногда муж невольно поддавался веселому настроению духа Николая. К концу вечера, однако, по мере того как лицо жены становилось все румянее и оживленнее, лицо ее мужа становилось все грустнее и бледнее, как будто доля оживления была одна на обоих, и по мере того как она увеличивалась в жене, она уменьшалась в муже.


Николай, с несходящей улыбкой на лице, несколько изогнувшись на кресле, сидел, близко наклоняясь над блондинкой и говоря ей мифологические комплименты.
Переменяя бойко положение ног в натянутых рейтузах, распространяя от себя запах духов и любуясь и своей дамой, и собою, и красивыми формами своих ног под натянутыми кичкирами, Николай говорил блондинке, что он хочет здесь, в Воронеже, похитить одну даму.
– Какую же?
– Прелестную, божественную. Глаза у ней (Николай посмотрел на собеседницу) голубые, рот – кораллы, белизна… – он глядел на плечи, – стан – Дианы…
Муж подошел к ним и мрачно спросил у жены, о чем она говорит.
– А! Никита Иваныч, – сказал Николай, учтиво вставая. И, как бы желая, чтобы Никита Иваныч принял участие в его шутках, он начал и ему сообщать свое намерение похитить одну блондинку.
Муж улыбался угрюмо, жена весело. Добрая губернаторша с неодобрительным видом подошла к ним.
– Анна Игнатьевна хочет тебя видеть, Nicolas, – сказала она, таким голосом выговаривая слова: Анна Игнатьевна, что Ростову сейчас стало понятно, что Анна Игнатьевна очень важная дама. – Пойдем, Nicolas. Ведь ты позволил мне так называть тебя?
– О да, ma tante. Кто же это?
– Анна Игнатьевна Мальвинцева. Она слышала о тебе от своей племянницы, как ты спас ее… Угадаешь?..
– Мало ли я их там спасал! – сказал Николай.
– Ее племянницу, княжну Болконскую. Она здесь, в Воронеже, с теткой. Ого! как покраснел! Что, или?..
– И не думал, полноте, ma tante.
– Ну хорошо, хорошо. О! какой ты!
Губернаторша подводила его к высокой и очень толстой старухе в голубом токе, только что кончившей свою карточную партию с самыми важными лицами в городе. Это была Мальвинцева, тетка княжны Марьи по матери, богатая бездетная вдова, жившая всегда в Воронеже. Она стояла, рассчитываясь за карты, когда Ростов подошел к ней. Она строго и важно прищурилась, взглянула на него и продолжала бранить генерала, выигравшего у нее.
– Очень рада, мой милый, – сказала она, протянув ему руку. – Милости прошу ко мне.
Поговорив о княжне Марье и покойнике ее отце, которого, видимо, не любила Мальвинцева, и расспросив о том, что Николай знал о князе Андрее, который тоже, видимо, не пользовался ее милостями, важная старуха отпустила его, повторив приглашение быть у нее.
Николай обещал и опять покраснел, когда откланивался Мальвинцевой. При упоминании о княжне Марье Ростов испытывал непонятное для него самого чувство застенчивости, даже страха.
Отходя от Мальвинцевой, Ростов хотел вернуться к танцам, но маленькая губернаторша положила свою пухленькую ручку на рукав Николая и, сказав, что ей нужно поговорить с ним, повела его в диванную, из которой бывшие в ней вышли тотчас же, чтобы не мешать губернаторше.
– Знаешь, mon cher, – сказала губернаторша с серьезным выражением маленького доброго лица, – вот это тебе точно партия; хочешь, я тебя сосватаю?
– Кого, ma tante? – спросил Николай.
– Княжну сосватаю. Катерина Петровна говорит, что Лили, а по моему, нет, – княжна. Хочешь? Я уверена, твоя maman благодарить будет. Право, какая девушка, прелесть! И она совсем не так дурна.
– Совсем нет, – как бы обидевшись, сказал Николай. – Я, ma tante, как следует солдату, никуда не напрашиваюсь и ни от чего не отказываюсь, – сказал Ростов прежде, чем он успел подумать о том, что он говорит.
– Так помни же: это не шутка.
– Какая шутка!
– Да, да, – как бы сама с собою говоря, сказала губернаторша. – А вот что еще, mon cher, entre autres. Vous etes trop assidu aupres de l'autre, la blonde. [мой друг. Ты слишком ухаживаешь за той, за белокурой.] Муж уж жалок, право…
– Ах нет, мы с ним друзья, – в простоте душевной сказал Николай: ему и в голову не приходило, чтобы такое веселое для него препровождение времени могло бы быть для кого нибудь не весело.
«Что я за глупость сказал, однако, губернаторше! – вдруг за ужином вспомнилось Николаю. – Она точно сватать начнет, а Соня?..» И, прощаясь с губернаторшей, когда она, улыбаясь, еще раз сказала ему: «Ну, так помни же», – он отвел ее в сторону:
– Но вот что, по правде вам сказать, ma tante…
– Что, что, мой друг; пойдем вот тут сядем.
Николай вдруг почувствовал желание и необходимость рассказать все свои задушевные мысли (такие, которые и не рассказал бы матери, сестре, другу) этой почти чужой женщине. Николаю потом, когда он вспоминал об этом порыве ничем не вызванной, необъяснимой откровенности, которая имела, однако, для него очень важные последствия, казалось (как это и кажется всегда людям), что так, глупый стих нашел; а между тем этот порыв откровенности, вместе с другими мелкими событиями, имел для него и для всей семьи огромные последствия.
– Вот что, ma tante. Maman меня давно женить хочет на богатой, но мне мысль одна эта противна, жениться из за денег.
– О да, понимаю, – сказала губернаторша.
– Но княжна Болконская, это другое дело; во первых, я вам правду скажу, она мне очень нравится, она по сердцу мне, и потом, после того как я ее встретил в таком положении, так странно, мне часто в голову приходило что это судьба. Особенно подумайте: maman давно об этом думала, но прежде мне ее не случалось встречать, как то все так случалось: не встречались. И во время, когда Наташа была невестой ее брата, ведь тогда мне бы нельзя было думать жениться на ней. Надо же, чтобы я ее встретил именно тогда, когда Наташина свадьба расстроилась, ну и потом всё… Да, вот что. Я никому не говорил этого и не скажу. А вам только.
Губернаторша пожала его благодарно за локоть.
– Вы знаете Софи, кузину? Я люблю ее, я обещал жениться и женюсь на ней… Поэтому вы видите, что про это не может быть и речи, – нескладно и краснея говорил Николай.
– Mon cher, mon cher, как же ты судишь? Да ведь у Софи ничего нет, а ты сам говорил, что дела твоего папа очень плохи. А твоя maman? Это убьет ее, раз. Потом Софи, ежели она девушка с сердцем, какая жизнь для нее будет? Мать в отчаянии, дела расстроены… Нет, mon cher, ты и Софи должны понять это.
Николай молчал. Ему приятно было слышать эти выводы.
– Все таки, ma tante, этого не может быть, – со вздохом сказал он, помолчав немного. – Да пойдет ли еще за меня княжна? и опять, она теперь в трауре. Разве можно об этом думать?
– Да разве ты думаешь, что я тебя сейчас и женю. Il y a maniere et maniere, [На все есть манера.] – сказала губернаторша.
– Какая вы сваха, ma tante… – сказал Nicolas, целуя ее пухлую ручку.


Приехав в Москву после своей встречи с Ростовым, княжна Марья нашла там своего племянника с гувернером и письмо от князя Андрея, который предписывал им их маршрут в Воронеж, к тетушке Мальвинцевой. Заботы о переезде, беспокойство о брате, устройство жизни в новом доме, новые лица, воспитание племянника – все это заглушило в душе княжны Марьи то чувство как будто искушения, которое мучило ее во время болезни и после кончины ее отца и в особенности после встречи с Ростовым. Она была печальна. Впечатление потери отца, соединявшееся в ее душе с погибелью России, теперь, после месяца, прошедшего с тех пор в условиях покойной жизни, все сильнее и сильнее чувствовалось ей. Она была тревожна: мысль об опасностях, которым подвергался ее брат – единственный близкий человек, оставшийся у нее, мучила ее беспрестанно. Она была озабочена воспитанием племянника, для которого она чувствовала себя постоянно неспособной; но в глубине души ее было согласие с самой собою, вытекавшее из сознания того, что она задавила в себе поднявшиеся было, связанные с появлением Ростова, личные мечтания и надежды.
Когда на другой день после своего вечера губернаторша приехала к Мальвинцевой и, переговорив с теткой о своих планах (сделав оговорку о том, что, хотя при теперешних обстоятельствах нельзя и думать о формальном сватовстве, все таки можно свести молодых людей, дать им узнать друг друга), и когда, получив одобрение тетки, губернаторша при княжне Марье заговорила о Ростове, хваля его и рассказывая, как он покраснел при упоминании о княжне, – княжна Марья испытала не радостное, но болезненное чувство: внутреннее согласие ее не существовало более, и опять поднялись желания, сомнения, упреки и надежды.
В те два дня, которые прошли со времени этого известия и до посещения Ростова, княжна Марья не переставая думала о том, как ей должно держать себя в отношении Ростова. То она решала, что она не выйдет в гостиную, когда он приедет к тетке, что ей, в ее глубоком трауре, неприлично принимать гостей; то она думала, что это будет грубо после того, что он сделал для нее; то ей приходило в голову, что ее тетка и губернаторша имеют какие то виды на нее и Ростова (их взгляды и слова иногда, казалось, подтверждали это предположение); то она говорила себе, что только она с своей порочностью могла думать это про них: не могли они не помнить, что в ее положении, когда еще она не сняла плерезы, такое сватовство было бы оскорбительно и ей, и памяти ее отца. Предполагая, что она выйдет к нему, княжна Марья придумывала те слова, которые он скажет ей и которые она скажет ему; и то слова эти казались ей незаслуженно холодными, то имеющими слишком большое значение. Больше же всего она при свидании с ним боялась за смущение, которое, она чувствовала, должно было овладеть ею и выдать ее, как скоро она его увидит.
Но когда, в воскресенье после обедни, лакей доложил в гостиной, что приехал граф Ростов, княжна не выказала смущения; только легкий румянец выступил ей на щеки, и глаза осветились новым, лучистым светом.
– Вы его видели, тетушка? – сказала княжна Марья спокойным голосом, сама не зная, как это она могла быть так наружно спокойна и естественна.
Когда Ростов вошел в комнату, княжна опустила на мгновенье голову, как бы предоставляя время гостю поздороваться с теткой, и потом, в самое то время, как Николай обратился к ней, она подняла голову и блестящими глазами встретила его взгляд. Полным достоинства и грации движением она с радостной улыбкой приподнялась, протянула ему свою тонкую, нежную руку и заговорила голосом, в котором в первый раз звучали новые, женские грудные звуки. M lle Bourienne, бывшая в гостиной, с недоумевающим удивлением смотрела на княжну Марью. Самая искусная кокетка, она сама не могла бы лучше маневрировать при встрече с человеком, которому надо было понравиться.
«Или ей черное так к лицу, или действительно она так похорошела, и я не заметила. И главное – этот такт и грация!» – думала m lle Bourienne.
Ежели бы княжна Марья в состоянии была думать в эту минуту, она еще более, чем m lle Bourienne, удивилась бы перемене, происшедшей в ней. С той минуты как она увидала это милое, любимое лицо, какая то новая сила жизни овладела ею и заставляла ее, помимо ее воли, говорить и действовать. Лицо ее, с того времени как вошел Ростов, вдруг преобразилось. Как вдруг с неожиданной поражающей красотой выступает на стенках расписного и резного фонаря та сложная искусная художественная работа, казавшаяся прежде грубою, темною и бессмысленною, когда зажигается свет внутри: так вдруг преобразилось лицо княжны Марьи. В первый раз вся та чистая духовная внутренняя работа, которою она жила до сих пор, выступила наружу. Вся ее внутренняя, недовольная собой работа, ее страдания, стремление к добру, покорность, любовь, самопожертвование – все это светилось теперь в этих лучистых глазах, в тонкой улыбке, в каждой черте ее нежного лица.
Ростов увидал все это так же ясно, как будто он знал всю ее жизнь. Он чувствовал, что существо, бывшее перед ним, было совсем другое, лучшее, чем все те, которые он встречал до сих пор, и лучшее, главное, чем он сам.
Разговор был самый простой и незначительный. Они говорили о войне, невольно, как и все, преувеличивая свою печаль об этом событии, говорили о последней встрече, причем Николай старался отклонять разговор на другой предмет, говорили о доброй губернаторше, о родных Николая и княжны Марьи.
Княжна Марья не говорила о брате, отвлекая разговор на другой предмет, как только тетка ее заговаривала об Андрее. Видно было, что о несчастиях России она могла говорить притворно, но брат ее был предмет, слишком близкий ее сердцу, и она не хотела и не могла слегка говорить о нем. Николай заметил это, как он вообще с несвойственной ему проницательной наблюдательностью замечал все оттенки характера княжны Марьи, которые все только подтверждали его убеждение, что она была совсем особенное и необыкновенное существо. Николай, точно так же, как и княжна Марья, краснел и смущался, когда ему говорили про княжну и даже когда он думал о ней, но в ее присутствии чувствовал себя совершенно свободным и говорил совсем не то, что он приготавливал, а то, что мгновенно и всегда кстати приходило ему в голову.
Во время короткого визита Николая, как и всегда, где есть дети, в минуту молчания Николай прибег к маленькому сыну князя Андрея, лаская его и спрашивая, хочет ли он быть гусаром? Он взял на руки мальчика, весело стал вертеть его и оглянулся на княжну Марью. Умиленный, счастливый и робкий взгляд следил за любимым ею мальчиком на руках любимого человека. Николай заметил и этот взгляд и, как бы поняв его значение, покраснел от удовольствия и добродушно весело стал целовать мальчика.
Княжна Марья не выезжала по случаю траура, а Николай не считал приличным бывать у них; но губернаторша все таки продолжала свое дело сватовства и, передав Николаю то лестное, что сказала про него княжна Марья, и обратно, настаивала на том, чтобы Ростов объяснился с княжной Марьей. Для этого объяснения она устроила свиданье между молодыми людьми у архиерея перед обедней.
Хотя Ростов и сказал губернаторше, что он не будет иметь никакого объяснения с княжной Марьей, но он обещался приехать.
Как в Тильзите Ростов не позволил себе усомниться в том, хорошо ли то, что признано всеми хорошим, точно так же и теперь, после короткой, но искренней борьбы между попыткой устроить свою жизнь по своему разуму и смиренным подчинением обстоятельствам, он выбрал последнее и предоставил себя той власти, которая его (он чувствовал) непреодолимо влекла куда то. Он знал, что, обещав Соне, высказать свои чувства княжне Марье было бы то, что он называл подлость. И он знал, что подлости никогда не сделает. Но он знал тоже (и не то, что знал, а в глубине души чувствовал), что, отдаваясь теперь во власть обстоятельств и людей, руководивших им, он не только не делает ничего дурного, но делает что то очень, очень важное, такое важное, чего он еще никогда не делал в жизни.
После его свиданья с княжной Марьей, хотя образ жизни его наружно оставался тот же, но все прежние удовольствия потеряли для него свою прелесть, и он часто думал о княжне Марье; но он никогда не думал о ней так, как он без исключения думал о всех барышнях, встречавшихся ему в свете, не так, как он долго и когда то с восторгом думал о Соне. О всех барышнях, как и почти всякий честный молодой человек, он думал как о будущей жене, примеривал в своем воображении к ним все условия супружеской жизни: белый капот, жена за самоваром, женина карета, ребятишки, maman и papa, их отношения с ней и т. д., и т. д., и эти представления будущего доставляли ему удовольствие; но когда он думал о княжне Марье, на которой его сватали, он никогда не мог ничего представить себе из будущей супружеской жизни. Ежели он и пытался, то все выходило нескладно и фальшиво. Ему только становилось жутко.


Страшное известие о Бородинском сражении, о наших потерях убитыми и ранеными, а еще более страшное известие о потере Москвы были получены в Воронеже в половине сентября. Княжна Марья, узнав только из газет о ране брата и не имея о нем никаких определенных сведений, собралась ехать отыскивать князя Андрея, как слышал Николай (сам же он не видал ее).
Получив известие о Бородинском сражении и об оставлении Москвы, Ростов не то чтобы испытывал отчаяние, злобу или месть и тому подобные чувства, но ему вдруг все стало скучно, досадно в Воронеже, все как то совестно и неловко. Ему казались притворными все разговоры, которые он слышал; он не знал, как судить про все это, и чувствовал, что только в полку все ему опять станет ясно. Он торопился окончанием покупки лошадей и часто несправедливо приходил в горячность с своим слугой и вахмистром.
Несколько дней перед отъездом Ростова в соборе было назначено молебствие по случаю победы, одержанной русскими войсками, и Николай поехал к обедне. Он стал несколько позади губернатора и с служебной степенностью, размышляя о самых разнообразных предметах, выстоял службу. Когда молебствие кончилось, губернаторша подозвала его к себе.
– Ты видел княжну? – сказала она, головой указывая на даму в черном, стоявшую за клиросом.
Николай тотчас же узнал княжну Марью не столько по профилю ее, который виднелся из под шляпы, сколько по тому чувству осторожности, страха и жалости, которое тотчас же охватило его. Княжна Марья, очевидно погруженная в свои мысли, делала последние кресты перед выходом из церкви.
Николай с удивлением смотрел на ее лицо. Это было то же лицо, которое он видел прежде, то же было в нем общее выражение тонкой, внутренней, духовной работы; но теперь оно было совершенно иначе освещено. Трогательное выражение печали, мольбы и надежды было на нем. Как и прежде бывало с Николаем в ее присутствии, он, не дожидаясь совета губернаторши подойти к ней, не спрашивая себя, хорошо ли, прилично ли или нет будет его обращение к ней здесь, в церкви, подошел к ней и сказал, что он слышал о ее горе и всей душой соболезнует ему. Едва только она услыхала его голос, как вдруг яркий свет загорелся в ее лице, освещая в одно и то же время и печаль ее, и радость.
– Я одно хотел вам сказать, княжна, – сказал Ростов, – это то, что ежели бы князь Андрей Николаевич не был бы жив, то, как полковой командир, в газетах это сейчас было бы объявлено.
Княжна смотрела на него, не понимая его слов, но радуясь выражению сочувствующего страдания, которое было в его лице.
– И я столько примеров знаю, что рана осколком (в газетах сказано гранатой) бывает или смертельна сейчас же, или, напротив, очень легкая, – говорил Николай. – Надо надеяться на лучшее, и я уверен…
Княжна Марья перебила его.
– О, это было бы так ужа… – начала она и, не договорив от волнения, грациозным движением (как и все, что она делала при нем) наклонив голову и благодарно взглянув на него, пошла за теткой.
Вечером этого дня Николай никуда не поехал в гости и остался дома, с тем чтобы покончить некоторые счеты с продавцами лошадей. Когда он покончил дела, было уже поздно, чтобы ехать куда нибудь, но было еще рано, чтобы ложиться спать, и Николай долго один ходил взад и вперед по комнате, обдумывая свою жизнь, что с ним редко случалось.
Княжна Марья произвела на него приятное впечатление под Смоленском. То, что он встретил ее тогда в таких особенных условиях, и то, что именно на нее одно время его мать указывала ему как на богатую партию, сделали то, что он обратил на нее особенное внимание. В Воронеже, во время его посещения, впечатление это было не только приятное, но сильное. Николай был поражен той особенной, нравственной красотой, которую он в этот раз заметил в ней. Однако он собирался уезжать, и ему в голову не приходило пожалеть о том, что уезжая из Воронежа, он лишается случая видеть княжну. Но нынешняя встреча с княжной Марьей в церкви (Николай чувствовал это) засела ему глубже в сердце, чем он это предвидел, и глубже, чем он желал для своего спокойствия. Это бледное, тонкое, печальное лицо, этот лучистый взгляд, эти тихие, грациозные движения и главное – эта глубокая и нежная печаль, выражавшаяся во всех чертах ее, тревожили его и требовали его участия. В мужчинах Ростов терпеть не мог видеть выражение высшей, духовной жизни (оттого он не любил князя Андрея), он презрительно называл это философией, мечтательностью; но в княжне Марье, именно в этой печали, выказывавшей всю глубину этого чуждого для Николая духовного мира, он чувствовал неотразимую привлекательность.
«Чудная должна быть девушка! Вот именно ангел! – говорил он сам с собою. – Отчего я не свободен, отчего я поторопился с Соней?» И невольно ему представилось сравнение между двумя: бедность в одной и богатство в другой тех духовных даров, которых не имел Николай и которые потому он так высоко ценил. Он попробовал себе представить, что бы было, если б он был свободен. Каким образом он сделал бы ей предложение и она стала бы его женою? Нет, он не мог себе представить этого. Ему делалось жутко, и никакие ясные образы не представлялись ему. С Соней он давно уже составил себе будущую картину, и все это было просто и ясно, именно потому, что все это было выдумано, и он знал все, что было в Соне; но с княжной Марьей нельзя было себе представить будущей жизни, потому что он не понимал ее, а только любил.
Мечтания о Соне имели в себе что то веселое, игрушечное. Но думать о княжне Марье всегда было трудно и немного страшно.
«Как она молилась! – вспомнил он. – Видно было, что вся душа ее была в молитве. Да, это та молитва, которая сдвигает горы, и я уверен, что молитва ее будет исполнена. Отчего я не молюсь о том, что мне нужно? – вспомнил он. – Что мне нужно? Свободы, развязки с Соней. Она правду говорила, – вспомнил он слова губернаторши, – кроме несчастья, ничего не будет из того, что я женюсь на ней. Путаница, горе maman… дела… путаница, страшная путаница! Да я и не люблю ее. Да, не так люблю, как надо. Боже мой! выведи меня из этого ужасного, безвыходного положения! – начал он вдруг молиться. – Да, молитва сдвинет гору, но надо верить и не так молиться, как мы детьми молились с Наташей о том, чтобы снег сделался сахаром, и выбегали на двор пробовать, делается ли из снегу сахар. Нет, но я не о пустяках молюсь теперь», – сказал он, ставя в угол трубку и, сложив руки, становясь перед образом. И, умиленный воспоминанием о княжне Марье, он начал молиться так, как он давно не молился. Слезы у него были на глазах и в горле, когда в дверь вошел Лаврушка с какими то бумагами.
– Дурак! что лезешь, когда тебя не спрашивают! – сказал Николай, быстро переменяя положение.
– От губернатора, – заспанным голосом сказал Лаврушка, – кульер приехал, письмо вам.
– Ну, хорошо, спасибо, ступай!
Николай взял два письма. Одно было от матери, другое от Сони. Он узнал их по почеркам и распечатал первое письмо Сони. Не успел он прочесть нескольких строк, как лицо его побледнело и глаза его испуганно и радостно раскрылись.
– Нет, это не может быть! – проговорил он вслух. Не в силах сидеть на месте, он с письмом в руках, читая его. стал ходить по комнате. Он пробежал письмо, потом прочел его раз, другой, и, подняв плечи и разведя руками, он остановился посреди комнаты с открытым ртом и остановившимися глазами. То, о чем он только что молился, с уверенностью, что бог исполнит его молитву, было исполнено; но Николай был удивлен этим так, как будто это было что то необыкновенное, и как будто он никогда не ожидал этого, и как будто именно то, что это так быстро совершилось, доказывало то, что это происходило не от бога, которого он просил, а от обыкновенной случайности.
Тот, казавшийся неразрешимым, узел, который связывал свободу Ростова, был разрешен этим неожиданным (как казалось Николаю), ничем не вызванным письмом Сони. Она писала, что последние несчастные обстоятельства, потеря почти всего имущества Ростовых в Москве, и не раз высказываемые желания графини о том, чтобы Николай женился на княжне Болконской, и его молчание и холодность за последнее время – все это вместе заставило ее решиться отречься от его обещаний и дать ему полную свободу.
«Мне слишком тяжело было думать, что я могу быть причиной горя или раздора в семействе, которое меня облагодетельствовало, – писала она, – и любовь моя имеет одною целью счастье тех, кого я люблю; и потому я умоляю вас, Nicolas, считать себя свободным и знать, что несмотря ни на что, никто сильнее не может вас любить, как ваша Соня».
Оба письма были из Троицы. Другое письмо было от графини. В письме этом описывались последние дни в Москве, выезд, пожар и погибель всего состояния. В письме этом, между прочим, графиня писала о том, что князь Андрей в числе раненых ехал вместе с ними. Положение его было очень опасно, но теперь доктор говорит, что есть больше надежды. Соня и Наташа, как сиделки, ухаживают за ним.
С этим письмом на другой день Николай поехал к княжне Марье. Ни Николай, ни княжна Марья ни слова не сказали о том, что могли означать слова: «Наташа ухаживает за ним»; но благодаря этому письму Николай вдруг сблизился с княжной в почти родственные отношения.
На другой день Ростов проводил княжну Марью в Ярославль и через несколько дней сам уехал в полк.


Письмо Сони к Николаю, бывшее осуществлением его молитвы, было написано из Троицы. Вот чем оно было вызвано. Мысль о женитьбе Николая на богатой невесте все больше и больше занимала старую графиню. Она знала, что Соня была главным препятствием для этого. И жизнь Сони последнее время, в особенности после письма Николая, описывавшего свою встречу в Богучарове с княжной Марьей, становилась тяжелее и тяжелее в доме графини. Графиня не пропускала ни одного случая для оскорбительного или жестокого намека Соне.
Но несколько дней перед выездом из Москвы, растроганная и взволнованная всем тем, что происходило, графиня, призвав к себе Соню, вместо упреков и требований, со слезами обратилась к ней с мольбой о том, чтобы она, пожертвовав собою, отплатила бы за все, что было для нее сделано, тем, чтобы разорвала свои связи с Николаем.
– Я не буду покойна до тех пор, пока ты мне не дашь этого обещания.
Соня разрыдалась истерически, отвечала сквозь рыдания, что она сделает все, что она на все готова, но не дала прямого обещания и в душе своей не могла решиться на то, чего от нее требовали. Надо было жертвовать собой для счастья семьи, которая вскормила и воспитала ее. Жертвовать собой для счастья других было привычкой Сони. Ее положение в доме было таково, что только на пути жертвованья она могла выказывать свои достоинства, и она привыкла и любила жертвовать собой. Но прежде во всех действиях самопожертвованья она с радостью сознавала, что она, жертвуя собой, этим самым возвышает себе цену в глазах себя и других и становится более достойною Nicolas, которого она любила больше всего в жизни; но теперь жертва ее должна была состоять в том, чтобы отказаться от того, что для нее составляло всю награду жертвы, весь смысл жизни. И в первый раз в жизни она почувствовала горечь к тем людям, которые облагодетельствовали ее для того, чтобы больнее замучить; почувствовала зависть к Наташе, никогда не испытывавшей ничего подобного, никогда не нуждавшейся в жертвах и заставлявшей других жертвовать себе и все таки всеми любимой. И в первый раз Соня почувствовала, как из ее тихой, чистой любви к Nicolas вдруг начинало вырастать страстное чувство, которое стояло выше и правил, и добродетели, и религии; и под влиянием этого чувства Соня невольно, выученная своею зависимою жизнью скрытности, в общих неопределенных словах ответив графине, избегала с ней разговоров и решилась ждать свидания с Николаем с тем, чтобы в этом свидании не освободить, но, напротив, навсегда связать себя с ним.
Хлопоты и ужас последних дней пребывания Ростовых в Москве заглушили в Соне тяготившие ее мрачные мысли. Она рада была находить спасение от них в практической деятельности. Но когда она узнала о присутствии в их доме князя Андрея, несмотря на всю искреннюю жалость, которую она испытала к нему и к Наташе, радостное и суеверное чувство того, что бог не хочет того, чтобы она была разлучена с Nicolas, охватило ее. Она знала, что Наташа любила одного князя Андрея и не переставала любить его. Она знала, что теперь, сведенные вместе в таких страшных условиях, они снова полюбят друг друга и что тогда Николаю вследствие родства, которое будет между ними, нельзя будет жениться на княжне Марье. Несмотря на весь ужас всего происходившего в последние дни и во время первых дней путешествия, это чувство, это сознание вмешательства провидения в ее личные дела радовало Соню.
В Троицкой лавре Ростовы сделали первую дневку в своем путешествии.
В гостинице лавры Ростовым были отведены три большие комнаты, из которых одну занимал князь Андрей. Раненому было в этот день гораздо лучше. Наташа сидела с ним. В соседней комнате сидели граф и графиня, почтительно беседуя с настоятелем, посетившим своих давнишних знакомых и вкладчиков. Соня сидела тут же, и ее мучило любопытство о том, о чем говорили князь Андрей с Наташей. Она из за двери слушала звуки их голосов. Дверь комнаты князя Андрея отворилась. Наташа с взволнованным лицом вышла оттуда и, не замечая приподнявшегося ей навстречу и взявшегося за широкий рукав правой руки монаха, подошла к Соне и взяла ее за руку.