Интерфейсы и обратный вызов

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

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

Устанавливая таймер, мы задаем интервал времени и указываем, что должно произойти по его истечении. Читать

Импортирование классов Java

Импортирование классов JavaКласс может использовать все классы из собственного пакета и все общедоступные классы из других пакетов. Доступ к классам их других пакетов можно получить двумя путями. Во первых, можно указывать полное имя пакета перед именем каждого класса. Например:

Очевидно, что этот способ слишком утомителен. Более простой и распространенный способ предусматривает применение ключевого слова import. В этом случае имя пакета перед именем класса записывать не обязательно. Читать

Полиморфизм Java

Полиморфизм JavaСуществует простое правило, позволяющее определить, стоит ли конкретной ситуации применять наследование или нет. Если между объектами существует  отношение «является» («is-a»), то каждый объект подкласса является объектом суперкласса. Например, каждый менеджер является сотрудником. Следовательно, имеет смысл сделать класс Manager подклассом класса Employee. Естественно, обратное утверждение неверно — не каждый сотрудник является менеджером.

Другой способ — принцип подстановки. Этот принцип гласит, что объект подкласса можно использовать вместо любого объекта суперкласса. Читать

Метод hashCode() Java

Метод hashCode() JavaХеш-код это целое число, генерируемое на основе конкретного объекта. Хеш-код можно рассматривать как некоторый шифр: если x и y — разные объекты, то с высокой степенью вероятности должны различаться результаты вызовов x.hashCode() и y.hashCode(). В классе String для вычисления хеш-кода используется следующий алгоритм: Читать

Как сгенерировать исключение Java

Как сгенерировать исключение JavaПредположим, что с вашей программой случилось нечто ужасное. У вас есть метод readData(), считывающий данные из файла, в заголовке которого указано следующиее:

Content-length: 1024

Однако посе воода 733 символов файл окончился. Вы считаете эту ситуацию настолько ненормальной, что решаете генерировать исключение. Теперь необходимо решить, какого типа должно быть исключение. Нам подходит одна из разновидностей класса IOException. Просматривая документацию, вы обнаруживайте описание исключения EOFException: «Сигнализирует о том, что во время ввода данных неожиданно обнаружен признак конца файла EOF». Отлично. Это исключение можно создать двумя способами: Читать

Обработчик ошибок Java

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

Поля для ввода пароля Java

Поля для ввода пароля JavaПоля для ввода пароля представляют собой особый вид полей редактирования. Чтобы скрыть пароль от посторонних наблюдателей, его символы не отображаются на экране. Вместо этого каждый символ в пароле заменяется эхо-символом обычно звездочкой (*).

В библиотеке Swing предусмотрен класс JPasswordField, реализующий такое поле редактирования. Поля для ввода пароля — это еще одна демонстрация преимуществ архитектуры «Модель — Представление — Контроллер». Для хранения данных пароль использует ту же модель, что и обычное поле редактирования, но его представление изменено и заменяет все символы пароля эхо-символами.

Object: глобальный суперкласс

Object: глобальный суперклассКласс object является предком всех классов — каждый класс в языке Java расширяет класс Object. Однако явно отражать этот факт, как в приведенной ниже строке кода, не нужно:

Если суперкласс явно не указан, им считается класс Object. Поскольку в языке Java каждый класс расширяет Object, очень важно знать, какими возможностями обладает сам класс Object. Некоторые методы класса Object можно понять лишь после изучения потоков. Читать

Уничтожение объекта и метод finalize()

Уничтожение объекта и метод finalize()В некоторых объектно-ориентированных языках, в частности в C++, есть явные деструкторы, предназначенные для уничтожения объектов. Основная их задача — освобождение памяти, занятной объектами. Поскольку в языке Java реализован механизм автоматической сборки мусора, освобождать память вручную нет никакой необходимости, поэтому в языке Java деструкторы отсутствуют.

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

Метод equals() Java

Метод equals() JavaМетод equals() класса Object проверяет, эквивалентны ли два объекта. Поскольку метод equals() реализован в классе Object, он определяет лишь, ссылаются ли переменные на один и тот же объект. В качестве проверки по умолчанию эти действия вполне оправданы: всякий объект эквивалентен самому себе.

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