Язык программирования Java

Энергетика
Электрические сети энергосистем
России
Развитие атомной энергетики России
Тепловые электростанции
Газотурбинные тепловые станции
Анализ мирового энернетического рынка
Воздействие радиации на человека
Машиностроение для энергетики
Математика примеры решения задач
Примеры вычисления интегралов
Вычисление производной
Электротехника расчет цепей
Курсовая работа по ТОЭ
Теория электрических цепей
Расчет трехфазных электрических
цепей
Расчет переходных процессов в
электрических цепях
Резонанс в электрических цепях
Теория нелинейных электрических цепей
Проектирование электропривода
Химия
Курс лекций по химии
Органическая химия
Информатика
Локальные сети
Курс лекций по информатике
Visual FoxPro
Конструктор форм
Создание отчета
Справочная система
Управление проектом
Библиотеки классов
Публикация данных на Web-сервере
Язык программирования Java
История искусства
История живописи, архитектуры, дизайна
Лекции по истории искусств
Искусство катакомб
Графика
Техническая механика
Задачи контрольной работы
Разработка сборочного чертежа
Начертательная геометрия
Физика примеры решения задач
Колебания и волны
Квантовая природа света
Квантовая природа излучения
Физика атомов
Физика элементарных частиц
Техническая термодинамика
  • Законы идеальных газов
  • Молекулярно-кинетическая теория газов
  • Теплопроводность газа
  • Физические основы термодинамики
  • Работа расширения газа
  • Внутренняя энергия
  • Напряженность электрического поля.
  • Напряженность поля точечных зарядов
  • Потенциальная энергия и потенциал
    поля точечных зарядов
  • Уравнение Клаузиуса - Мосотти
  • Поляризация диэлектриков
  • Электрическая емкость
  • Книга, которую вы держите в руках, возникла из курса лекций, читаемых автором в течение последних лет для студентов младших курсов. Подобные книги рождаются после того, как студенты в сотый раз зададут один и тот же вопрос, который лектор уже несколько раз разъяснял в разных вариациях. Возникает желание отослать их к какой-нибудь литературе. Пересмотрев еще раз несколько десятков книг, использованных при подготовке лекций, порывшись в библиотеке и на прилавках книжных магазинов, лектор с удивлением обнаруживает, что не может предложить студентам ничего подходящего. Остается сесть за стол и написать книгу самому. Такое происхождение книги накладывает на нее определенные особенности. Она

    • представляет собой сгусток практического опыта, накопленного автором и его студентами с 1996 г.;
    • содержит ответы на часто задаваемые вопросы, последние "компьютерщики" называют FAQ (Frequency Asked Questions);
    • написана кратко и сжато, как конспект лекций, в ней нет лишних слов (за исключением, может быть, тех, что вы только что прочитали);
    • рассчитана на читателей, стремящихся быстро и всерьез ознакомиться с новинками компьютерных технологий;
    • содержит много примеров применения конструкций Java, которые можно использовать как фрагменты больших производственных разработок в качестве "How to?";
    • включает материал, являющийся обязательной частью подготовки специалиста по информационным технологиям;
    • не предполагает знание какого-либо языка программирования, а для знатоков выделяются особенности языка Java среди других языков;
    • предлагает обсуждение вопросов русификации Java.

    Прочитав эту книгу, вы вступите в ряды программистов на Java — разработчиков технологии начала XXI века.

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

     

    Глава 1. Встроенные типы данных, операции над ними

    • Приступая к изучению нового языка, полезно поинтересоваться, какие исходные данные могут обрабатываться средствами этого языка, в каком виде их можно задавать, и какие стандартные средства обработки этих данных заложены в язык. Это довольно скучное занятие, поскольку в каждом развитом языке программирования множество типов данных и еще больше правил их использования. Однако несоблюдение этих правил приводит к появлению скрытых ошибок, обнаружить которые иногда бывает очень трудно. Ну что же, в каждом ремесле приходится сначала "играть гаммы", и мы не можем от этого уйти.

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

    Глава 2. Объектно-ориентированное программирование в Java Вся полувековая история программирования компьютеров, а может быть, и история всей науки — это попытка совладать со сложностью окружающего мира. Задачи, встающие перед программистами, становятся все более громоздкими, информация, которую надо обработать, растет как снежный ком. Еще недавно обычными единицами измерения информации были килобайты и мегабайты, а сейчас уже говорят только о гигабайтах и терабайтах. Как только программисты предлагают более-менее удовлетворительное решение предложенных задач, тут же возникают новые, еще более сложные задачи. Программисты придумывают новые методы, создают новые языки. За полвека появилось несколько сотен языков, предложено множество методов и стилей. Некоторые методы и стили становятся общепринятыми и образуют на некоторое время так называемую парадигму программирования.

     

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

    Разработчики Java включили в язык дополнительную конструкцию — паке-ты (packages). Все классы Java распределяются по пакетам. Кроме классов пакеты могут включать в себя интерфейсы и вложенные подпакеты (subpackages). Образуется древовидная структура пакетов и подпакедчэв.

    Эта структура в точности отображается на структуру файловой системы. Все файлы с расширением class (содержащие байт-коды), образующие пакет, хранятся в одном каталоге файловой системы. Подпакеты собраны в подкаталоги этого каталога.

    Глава 4. Классы-оболочки Java — полностью объектно-ориентированный язык. Это означает, что все, что только можно, в Java представлено объектами.

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

    Но и для этих типов в языке Java есть соответствующие классы — классы-оболочки (wrapper) примитивных типов. Конечно, они предназначены не для вычислений, а для действий, типичных при работе с классами — создания объектов, преобразования объектов, получения численных значений объектов в разных формах и передачи объектов в методы по ссылке.

    Глава 5. Работа со строками Очень большое место в обработке информации занимает работа с текстами. Как и многое другое, текстовые строки в языке Java являются объектами. Они представляются экземплярами класса string или класса stringBuffer .

    Поначалу это необычно и кажется слишком громоздким, но, привыкнув, вы оцените удобство работы с,классами, а не с массивами символов.

    Конечно, возможно занести текст в массив символов типа char или даже в массив байтов типа byte , но тогда вы не сможете использовать готовые методы работы с текстовыми строками.

    Глава 6. Классы-коллекции В листинге 5.2 мы разобрали строку на слова. Как их сохранить для дальнейшей обработки?

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

    Кроме того, массивы всегда имеют постоянную, предварительно заданную, длину, в массивы неудобно добавлять элементы. При удалении элемента из массива оставшиеся элементы следует перенумеровывать.

    При решении задач, в которых количество элементов заранее неизвестно, элементы надо часто удалять и добавлять, надо искать другие способы хранения.

    В языке Java с самых первых версий есть класс vector , предназначенный для хранения переменного числа элементов самого общего типа object .

    Глава 7. Классы-утилиты В этой главе описаны средства, полезные для создания программ: работа с массивами, датами, случайными числами.

    Глава 8. Принципы построения графического интерфейса В предыдущих главах мы писали программы, связанные с текстовым терминалом и запускающиеся из командной строки. Такие программы называются консольными приложениями. Они разрабатываются для выполнения на серверах, там, где не требуется интерактивная связь с пользователем. Программы, тесно взаимодействующие с пользователем, воспринимающие сигналы от клавиатуры и мыши, работают в графической среде. Каждое приложение, предназначенное для работы в графической среде, должно создать хотя бы одно окно, в котором будет происходить его работа, и зарегистрировать его в графической оболочке операционной системы, чтобы окно могло взаимодействовать с операционной системой и другими окнами: перекрываться, перемещаться, менять размеры, сворачиваться в ярлык.

    Есть много различных графических систем: MS Windows, X Window System, Macintosh. В каждой из них свои правила построения окон и их компонентов: меню, полей ввода, кнопок, списков, полос прокрутки. Эти правила сложны и запутанны. Графические API содержат сотни функций.

    Глава 9. Графические примитивы При создании компонента, т. е. объекта класса Component, автоматически формируется его графический контекст (graphics context). В контексте размещается область рисования и вывода текста и изображений. Контекст содержит текущий и альтернативный цвет рисования и цвет фона — объекты класса color, текущий шрифт для вывода текста — объект класса Font.

    В контексте определена система координат, начало которой с координатами (0, 0) расположено в верхнем левом углу области рисования, ось Ох направлена вправо, ось Оу — вниз. Точки координат находятся между пикселами.

    Управляет контекстом класс Graphics или новый класс Graphics2D, введенный в Java 2. Поскольку графический контекст сильно зависит от конкретной графической платформы, эти классы сделаны абстрактными. Поэтому нельзя непосредственно создать экземпляры класса Graphics или Graphics2D.

    Однако каждая виртуальная машина Java реализует методы этих классов, создает их экземпляры для компонента и предоставляет объект класса Graphics методом getGraphics () класса Component или как аргумент методов

    paint() И update().

    Посмотрим сначала, какие методы работы с графикой и текстом предоставляет нам класс Graphics.

    Глава 10. Основные компоненты Графическая библиотека AWT предлагает более двадцати готовых компонентов. Они показаны на рис. 8.2. Наиболее часто используются подклассы класса Component: классы Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextArea, TextField, Panel, ScrollPane, Window, Dialog, FileDialog, Frame.

    Еще одна группа компонентов — это компоненты меню — классы Menuitem, MenuBar, Menu, PopupMenu, CheckboxMenuItem. Мы рассмотрим ИХ В главе 13.

    Забегая вперед, для каждого компонента перечислим события, которые в нем происходят. Обработку событий мы разберем в главе 12.

    Начнем изучать эти компоненты от простых компонентов к сложным и от наиболее часто используемых к применяемым реже. Но сначала посмотрим на то общее, что есть во всех этих компонентах, на сам класс component.

    Глава 11. Размещение компонентов

    В предыдущей главе мы размешали компоненты "вручную", задавая их размеры и положение в контейнере абсолютными координатами в координатной системе контейнера. Для этого мы применяли метод setBounds().

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

    Чтобы учесть изменение размеров окна, надо задать размеры и положение компонента относительно размеров контейнера, например, так:

    int w = getSizef).width;              // Получаем ширину 

    int h = getSizeO.height;             //и высоту контейнера 

    Button Ь = new Button("OK"); // Создаем кнопку 

    b.setBounds(9*w/20, 4*h/5, w/10, h/10);

    и при всяком изменении размеров окна задавать расположение компонента заново.

    Чтобы избавить программиста от этой кропотливой работы, в библиотеку AWT внесены два интерфейса: LayoutManager и порожденный от него интерфейс LayoutManager2, а также пять реализаций этих интерфейсов: классы BorlerLayout, CardLayout, FlowLayout, GridLayout И GridBagLayout. Эти классы названы менеджерами размещения (layout manager) компонентов.

    Каждый программист может создать свои менеджеры размещения, реализовав интерфейсы LayoutManager или LayoutManager2.

    Посмотрим, как размещают компоненты эти классы.

    Глава 12. Обработка событий

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

    Событие (event) в библиотеке AWT возникает при воздействии на компонент какими-нибудь манипуляциями мышью, при вводе с клавиатуры, при перемещении окна, изменении его размеров.

    Объект, в котором произошло событие, называется источником (source) события.

    Все события в AWT классифицированы. При возникновении события исполняющая система Java автоматически создает объект соответствующего событию класса. Этот объект не производит никаких действий, он только хранит все сведения о событии. Искусство художественного оформления книги в средневековой России играло не меньшую роль и было не менее оригинально, чем, например, иконопись или архитектура. Абсолютное большинство книг того периода было духовного содержания. Книга пришла на Русь вместе с христианством. В центре христианских обрядов стоит книга. Православные миссионеры всегда отправлялись к язычникам, имея при себе важнейшие книги христианского вероучения. Теоретическая механика Сопротивление материалов. Математика, физика

    Во главе иерархии классов-событий стоит класс Eventobject из пакета java.utii — непосредственное расширение класса object. Его расширяет абстрактный класс AWTEvent из пакета java.awt — глава классов, описывающих события библиотеки AWT. Дальнейшая иерархия классов-событий показана на рис. 12.1. Все классы, отображенные на рисунке, кроме класса AWTEvent, собраны в пакет java.awt.event.

    В контейнер типа Frame заложена возможность установки стандартной строки меню (menu bar), располагаемой ниже строки заголовка, как показано на рис. 13.1. Эта строка — объект класса MenuBar.

    Все, что нужно сделать для установки строки меню в контейнере Frame — это создать объект класса MenuBar и обратиться к методу setMenuBar ():

    Frame f = new Frame("Пример меню");  Поверхностный интеграл первого рода Пусть f(x,y,z) - функция, непрерывная на гладкой поверхности S. (Поверхность называется гладкой, если в каждой её точке существует касательная плоскость, непрерывно изменяющаяся вдоль поверхности). Примеры решения и оформления задач контрольной работы

    MenuBar mb = new MenuBar(); 

    f.setMenuBar(mb);

    Если имя mb не понадобится, можно совместить два последних обращения к методам:

    f.setMenuBar(new MenuBar());

    Разумеется, строка меню еще пуста и пункты меню не созданы.

    Каждый элемент строки меню — выпадающее меню (drop-down menu ) — это объект класса Menu. Создать эти объекты и занести их в строку меню ничуть не сложнее, чем создать строку меню:

    Глава 14. Апплеты

    До сих пор мы создавали приложения (applications), работающие самостоятельно (standalone) в JVM под управлением графической оболочки операционной системы. Эти приложения имели собственное окно верхнего уровня типа Frame, зарегистрированное в оконном менеджере (window manager) графической оболочки.

    Кроме приложений, язык Java позволяет создавать апплеты (applets). Это программы, работающие в среде другой программы — браузера. Апплеты не нуждаются в окне верхнего уровня — им служит окно браузера. Они не запускаются JVM — их загружает браузер, который сам запускает JVM для выполнения апплета. Эти особенности отражаются на написании программы апплета.

    С точки зрения языка Java, апплет — это всякое расширение класса Applet, который, в свою очередь, расширяет класс panel. Таким образом, апплет — это панель специального вида, контейнер для размещения компонентов с дополнительными свойствами и методами. Менеджером размещения компонентов по умолчанию, как и в классе Panel, служит FiowLayout. Класс Applet находится в пакете java. applet, в котором кроме него есть только три интерфейса, реализованные в браузере. Надо заметить, что не все браузеры реализуют эти интерфейсы полностью.

    Глава 15. Изображения и звук

    Как: уже упоминалось в предыдущей главе, изображение в Java — это объект класса image. Там же показано, как в апплетах применяются методы getlmageо для создания этих объектов из графических файлов.

    Приложения тоже могут применять аналогичные методы get image () класса Toolkit из пакета java.awt с одним аргументом типа string или URL. Обращение к этим методам из компонента выполняется через метод getToolkit () класса Component и выглядит так:

    Image img = getToolkit().getlmage("С:\\images\\lvanov.gif");

    В общем случае обращение можно сделать через статический метод getDef aultToolkit () класса Toolkit:

    Image img = Toolkit.getDefaultToolkit().getlmage

    Но, кроме этих методов, класс Toolkit содержит пять методов createlmage (), возвращающих ссылку на объект типа image:

    • createlmage (String filsName) — создает изображение из содержимого графического файла filename ;
    • createlmage (URL address) — создает изображение из содержимого графического файла по адресу address ;
    • createlmage (byte [] imageData) — создает изображение из массива байтов imageData , данные в котором должны иметь формат GIF или JPEG;
    • createlmage (byte [] imageData, int offset, int length) — создает изображение из части массива imageData , начинающейся с индекса offset длиной length байтов;
    • createlmage (ImageProducer producer) — создает изображение, полученное от поставщика producer .

    Синтез и запись звука в Java 2

    Глава 16. Обработка исключительных ситуаций

    Исключительные ситуации (exceptions) могут возникнуть во время выполнения (runtime) программы, прервав ее обычный ход. К ним относится деление на нуль, отсутствие загружаемого файла, отрицательный или вышедший за верхний предел индекс массива, переполнение выделенной памяти и масса других неприятностей, которые могут случиться в самый неподходящий момент.

    Конечно, можно предусмотреть такие ситуации и застраховаться от них как-нибудь так:

    if (something == wrong){

    // Предпринимаем аварийные действия 

    }else{

    // Обычный ход действий 

    }

    Но при этом много времени уходит на проверки, и программа превращается в набор этих проверок. Посмотрите любую штатную производственную программу, написанную на языке С или Pascal, и увидите, что она на 2/3 состоит из таких проверок.

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

    Глава 17. Подпроцессы

    Основное понятие современных операционных систем — процесс (process). Как и все общие понятия, процесс трудно определить, да это и не входит в задачу книги. Можно понимать под процессом выполняющуюся (runnable) программу, но надо помнить о том, что у процесса есть несколько состояний. Процесс может в любой момент перейти к выполнению машинного кода другой программы, а также "заснуть" (sleep) на некоторое время, приостановив выполнение программы. Он может быть выгружен на диск. Количество состояний процесса и их особенности зависят от операционной системы.

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

    Если на компьютере только один процессор, то он переключается с одного процесса на другой, создавая видимость одновременной работы. Переключение происходит по истечении одного или нескольких "тиков" (ticks). Размер тика зависит от тактовой частоты процессора и обычно имеет порядок 0,01 секунды. Процессам назначаются разные приоритеты (priority). Процессы с низким приоритетом не могут прервать выполнение процесса с более высоким приоритетом, они меньше занимают процессор и поэтому выполняются медленно, как говорят, "на фоне". Самый высокий приоритет у системных процессов, например, у диспетчера (scheduler), который как раз и занимается переключением процессора с процесса на процесс. Такие процессы нельзя прерывать, пока они не закончат работу, иначе компьютер быстро придет в хаотическое состояние.

    Подпроцессы-демоны Группы подпроцессов

    Глава 18. Потоки ввода/вывода

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

    Для того чтобы отвлечься от особенностей конкретных устройств ввода/вывода, в Java употребляется понятие потока (stream). Считается, что в программу идет входной поток (input stream) символов Unicode или просто байтов, воспринимаемый в программе методами read(). Из программы методами write о или print (), println() выводится выходной поток (output stream) символов или байтов. При этом неважно, куда направлен поток: на консоль, на принтер, в файл или в сеть, методы write () и print () ничего об этом не знают.

    Можно представить себе поток как трубу, по которой в одном направлении последовательно "текут" символы или байты, один за другим. Методы read () , write () , print (), println () взаимодействуют с одним концом трубы, другой конец соединяется с источником или приемником данных конструкторами классов, в которых реализованы эти методы. 

    Конечно, полное игнорирование особенностей устройств ввода/вывода сильно замедляет передачу информации. Поэтому в Java все-таки выделяется файловый ввод/вывод, вывод на печать, сетевой поток.

    Глава 19. Сетевые средства Java

    Когда число компьютеров в учреждении переваливает за десяток и сотрудникам надоедает бегать с дискетами друг к другу для обмена файлами, тогда в компьютеры вставляются сетевые карты, протягиваются кабели и компьютеры объединяются в сеть. Сначала все компьютеры в сети равноправны, они делают одно и то же — это одноранговая (peer-to-peer) сеть. Потом покупается компьютер с большими и быстрыми жесткими дисками, и все файлы учреждения начинают храниться на данных дисках — этот компьютер становится файл-сервером, предоставляющим услуги хранения, поиска, архивирования файлов. Затем покупается дорогой и быстрый принтер. Компьютер, связанный с ним, становится принт-сервером, предоставляющим услуги печати. Потом появляются графический сервер, вычислительный сервер, сервер базы данных. Остальные компьютеры становятся клиентами этих серверов. Такая архитектура сети называется архитектурой клиент-сервер (client-server).

    Сервер постоянно находится в состоянии ожидания, он прослушивает (listen) сеть, ожидая запросов от клиентов. Клиент связывается с сервером и посылает ему запрос (request) с описанием услуги, например, имя нужного файла. Сервер обрабатывает запрос и отправляет ответ (response), в нашем примере, файл, или сообщение о невозможности оказать услугу. После этого связь может быть разорвана или продолжиться, организуя сеанс связи, называемый сессией (session).

    Запросы клиента и ответы сервера формируются по строгим правилам, совокупность которых образует протокол (protocol) связи. Всякий протокол должен, прежде всего, содержать правила соединения компьютеров. Клиент перед посылкой запроса должен удостовериться, что сервер в рабочем состоянии, прослушивает сеть, и услышал клиента. Послав запрос, клиент должен быть уверен, что запрос дошел до сервера, сервер понял запрос и готов ответить на него. Сервер обязан убедиться, что ответ дошел до клиента. Окончание сессии должно быть четко зафиксировано, чтобы сервер мог освободить ресурсы, занятые обработкой запросов клиента.

    Глава 20. В приложении мы вкратце перечислим аспекты технологии Java, не освещенные в основном тексте книги.