Java как центр архипелага - [5]
средствами, внешними по отношению к Java-системе (например, пи-
шется на языке C).
4.1.1.2. Наследование
Модель наследования в языке Java существенно отличается от мо-
дели C++. Во-первых, в Java нет множественного наследования.
Во-вторых, в языке предусмотрены средства для запрета дальней-
шего наследования (ключевое слово final перед определением
класса). В-третьих, в языке Java присутствует новое по отноше-
нию к C++ понятие интерфейса.
Интерфейс представляет собой набор описаний методов. Пример:
public interface Verbose {
public void drawOn (Graphics g);
public void printOn (OutputStream os);
}
public class Star extends Polygon implements Verbose {
public void drawOn (Graphics g) {
// Конкретная реализация отрисовки
}
public void printOn (OutputStream os) {
// Конкретная реализация печати
}
}
public class Text extends StringBuffer implements Verbose {
public void drawOn (Graphics g) {
// Конкретная реализация отрисовки
}
public void printOn (OutputStream os) {
// Конкретная реализация печати
}
}
public class Blackboard extends Canvas {
public void drawVerbose (Verbose d) {
Graphics g = getGraphics ();
d.drawOn (g);
}
}
Интерфейс Verbose содержит два метода. Первый предназначен для
рисования в графическом контексте, второй - для распечатки в
выходной поток.
Класс Star предствляет собой подкласс многоугольников
(Polygon). Помимо прочего, мы хотим рисовать об®екты этого
класса на доске (Blackboard) и выводить их описание в файл.
Для об®ектов класса Text мы хотим иметь возможность начертать
текст на доске и выводить его в файл.
Класс Blackboard - наследник класса Canvas, специально предназ-
наченного для рисования. Как мы видим, этот класс с помощью
единственного метода справляется с рисованием об®ектов, не име-
ющих общего предка (кроме класса Object).
Таким образом, с помощью интерфейсов можно компенсировать от-
сутствие множественного наследования. В контексте наследования
интерфейс можно рассматривать как абстрактный класс, не содер-
жащий данных.
4.1.1.3. Жизненный цикл об®екта
Об®екты создаются с помощью оператора new. Инициализация об®ек-
та производится с помощью соответствующего конструктора. Эти
операции разделить нельзя - за new следует конструктор. Пример.
Point myPoint = new Point ();
Других способов создания об®ектов (кроме оператора new) язык
Java не предоставляет.
Об®ект существует до тех пор, пока на него есть ссылки (то есть
пока он прямо или косвенно доступен хотя бы из одной перемен-
ной). В языке отсутствуют явные средства удаления об®ектов.
После того, как об®ект стал недоступен, он оказывается кандида-
том для утилизации сборщиком мусора.
Об®ект может стать недоступным, если хранившей его переменной
присвоено новое значение или если эта переменная перестала быть
доступной (произошел выход из блока). Пример.
Point p = new Point (100.0, 100.0);
. . .
p = new Point (1.0, 1.0);
// На точку с координатами (100, 100) ссылок больше нет
{
String s = new String ("Local string");
System.out.println (s);
}
// На строку "Local string" ссылок больше нет
В момент утилизации об®екта сборщиком мусора будет вызван метод
finalize. Из-за того, что сборщик мусора работает в фоновом ре-
жиме, вызов finalize является асинхронным.
4.1.2. Примитивные типы данных
В языке Java существует набор встроенных типов данных, которые
не являются об®ектами. Их не так много.
Представление чисел в языке Java фиксировано и, тем самым, не
зависит от аппаратной платформы.
- целые числа:
- - byte - 8 бит,
- - short - 16 бит,
- - int - 32 бита,
- - long - 64 бита.
Все числа со знаком, спецификатор unsigned в языке отсутствует.
- числа с плавающей точкой:
- - float - 32 бита,
- - double - 64 бита.
Представление должно соответствовать стандарту IEEE 754.
- char
Значение типа char есть 16-разрядное число без знака (диапазон
0-65535). Кодировка соответствует стандарту Unicode. В резуль-
тате с самого начала закладывается здоровая основа для решения
проблемы локализации Java-программ.
- boolean
Содержит значения true и false, которые не могут быть преобра-
зованы в другой тип.
В языке Java, разумеется, присутствуют массивы. Эти массивы ти-
пизированы. Декларация
Point myPoints[];
описывает переменную myPoints как массив об®ектов типа Point.
Завести массив определенного размера можно с помощью инструкции
вида
myPoints = new Point[10];
Значения элементов массива при этом устанавливаются равными
специальной величине null.
Размер массива может быть получен во время выполнения програм-
мы:
howMany = myPoints.length;
Других структурных типов (не являющихся об®ектами) в языке Java
нет, то есть нет структур, об®единений и т.п. Нет в Java и ука-
зателей.
Отметим, что строки символов являются об®ектами типа String
(текстовые константы) или StringBuffer (изменяемые строки).
Пример,
String hello = "Hello world!";
4.1.3. Пакеты
Классы в языке Java об®единяются в пакеты. Все классы, входящие
в один пакет, являются дружественными по отношению друг к дру-
гу, то есть имеют взаимный доступ к переменным и методам, если
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.