Главная » Просмотр файлов » И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java

И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (1160783), страница 7

Файл №1160783 И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java) 7 страницаИ.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (1160783) страница 72019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

В этом случае используется блокfinally, который выполняется после блоков try или catch. Например:39try{/*код, который может вызвать исключение*/}catch(Exception e){/*обработка исключения*/}finally{/*выполняется или после try, или после catch }У каждого раздела try должен быть по крайней мере или один раздел catch, или блок finally.

Блок finally используется для закрытияфайлов и освобождения других ресурсов, захваченных для временного использования в начале выполнения метода. Приведем пример:// пример #5 : выполнение блоков finally: SampleFinally.javaclass SampleFinally {static void procA() {try {System.out.println("внутри метода procA()");throw new RuntimeException("демонстрация исключения"); }finally { System.out.println("блок finally метода procA()");}}static void procB() {try {System.out.println("внутри метода procB()"); return;}finally { System.out.println("блок finally метода procB()"); }}public static void main(String[] args) {try {procA();}catch (Exception e) {/*обработка */}procB();}}В методе procA() из-за генерации исключения происходит преждевременный выход из блока try, но до выхода из функции выполняется раздел finally.

Метод procB() завершает работу выполнениемстоящего в try-блоке оператора return, но и при этом перед выходомиз метода выполняется код блока finally.Можно создать собственное исключение как подкласс классаException и затем использовать при обработке ситуаций, возникающих после вызова методов. Рассмотрим пример:Book getBook() {try {Book b1 = object.searchBookRecord("Java 2"); }catch(NoBookFoundException npfe) { /*обработка */}}40При неудачном поиске книги вызывается NoBookFoundException,который использовался в качестве собственного исключения. Он принимает два аргумента.

Один из них − сообщение, которое может бытьвыведено в поток ошибок; другой − реальное исключение, котороепривело к вызову нашего исключения. Этот код показывает, как можно сохранить другую информацию внутри пользовательского исключения. Преимущество этого сохранения состоит в том, что если вызываемый метод захочет узнать реальную причину вызоваNoBookFoundException, он всего лишь должен вызвать методgetHiddenException(). Это позволяет вызываемому методу решить,нужно ли работать со специфичным исключением или достаточно обработки NoBookFoundException.//пример #6 :собственное исключение: NoBookFoundException.javapublic class NoBookFoundException extends Exception {private Exception hiddenException_;public NoBookFoundException(String error, Exception excp){super(error);hiddenException_ = excp; }public Exception getHiddenException(){return(hiddenException_); }}Упражнения1.

java.io.OutputStream out;public int increment() {try { counter++;out.write(counter); }Какой код нужно добавить в метод increment()?а) }; б) catch (java.io.IOException e) {; с) finally {; д) return.2. Что будет выведено при вызове manip(2)?public int manip(int x) { int count = 3;try { count += x; m1(x); count++; }catch(Exception e) { count -= x; }return count; }3. Что будет выведено при вызове m1(2), если m2() генерируетArithmeticException?public int m1(int x) { int count=1;try { count += x; count += m2(count); count++;catch(ArithmeticException e) { count -= x; }finally { count += 3; }return count; }8.

КЛАССЫ СОБЫТИЙ41Современный подход к обработке событий основан на модели делегирования событий. В этой модели блок прослушивания (Listener)ждет поступления события от источника, после чего обрабатывает егои возвращает управление. Источник – это объект, который генерируетсобытие, если изменяется внутреннее состояние источника.

Когда событие происходит, все зарегистрированные блоки прослушиванияуведомляются и принимают копию объекта события. Источник должен вызвать метод, регистрирующий блок прослушивания определенного события. Форма метода:public void addТипListener(ТипListener el)Здесь el – ссылка на блок прослушивания события, объект, получающий уведомление о событии. Таким образом, событие – это объекткласса событий, который описывает состояние источника.В корне иерархии классов событий находится суперклассEventObject (java.util). Этот класс содержит два метода: getSourсe() −возвращающий источник событий и toString() − возвращающийстрочный эквивалент события. Подкласс AWTEvent (java.awt) является суперклассом всех AWT-событий.

Метод getID() определяет типсобытий. Пакет java.awt.event содержит ряд классов событий:ActionEvent − генерируется при нажатии кнопки, двойном щелчкепо элементам списка, при выборе пункта меню.AdjustmentEvent – генерируется при изменении полосы прокрутки.ComponentEvent − генерируется если компонент скрыт, перемещен, изменен в размере или становится видимым.FocusEvent − генерируется если компонент получает или теряетфокус ввода.Класс InputEvent является абстрактным суперклассом событийввода (клавиатуры или мыши). Чтобы рассмотреть события, связанные с обработкой событий клавиатуры, необходимо реализовать интерфейс KeyListener.

При нажатии клавиши генерируется событие созначением KEY_PRESSED. Это приводит к запросу обработчика событий keyPressed(). Когда клавиша отпускается, генерируется событие со значением KEY_RELEASED и выполняется обработчикkeyReleased(). Если нажатием клавиши сгенерирован символ, то посылается уведомление о событии со значением KEY_TYPED и вызывается обработчик keyTyped()./* пример #1 : обработка нажатия клавиши : JMyKey.java */import javax.swing.*;import java.awt.*;42import java.awt.event.*;class JMyKey extends JFrame implements KeyListener {String keymsg = "";public JMyKey(){super();addKeyListener(this);}public void keyPressed(KeyEvent ke){}public void keyTyped(KeyEvent ke){keymsg = ke.getKeyChar() + "";repaint();}public void keyReleased(KeyEvent ke){}public void paint(Graphics g){g.clearRect(0, 0, 300, 200);g.drawString(keymsg, 10, 40);}public static void main(String[] args){JMyKey s = new JMyKey ();s.addWindowListener( new WindowAdapter() {public void windowClosing(WindowEvent e){ System.exit(0);}});s.setSize(new Dimension(300, 200));s.setTitle("обработка нажатия клавиш");s.setVisible(true);}}Обработка нажатия специальных клавиш (перемещение курсора,функциональных клавиш) производится в keyPressed().

Они не доступны через keyTyped().Абстрактный класс WindowAdapter используется для приема иобработки событий окна при создании объекта прослушивания. Класссодержит перегружаемые методы windowActivated(WindowEvent),вызываемый при активации окна, windowСlosing(WindowEvent), вызываемый при закрытии окна и др.При создании кнопки вызывается конструктор JButton со строкой,которую нужно поместить на кнопке. JButton − это компонент, который автоматически перерисовывается как часть обновления без явного вызова перерисовки. Просто элемент добавляется на форму, и онаавтоматически заботится о своей перерисовке. Размещение кнопки на43форме производится внутри метода init().

Для добавления к интерфейсу новых элементов управления используется метод add() классаContainer.// пример #2 : добавление кнопки в апплет : MyButton.javaimport javax.swing.*;import java.awt.*;public class MyButton extends JApplet {JButton myB = new JButton("старт");public void init() {Container c = getContentPane();c.setLayout(new FlowLayout());c.add(myB);}}В примере был использован "менеджер компоновки" FlowLayout,который является причиной того, что управляющие элементы равномерно плавают на форме, слева направо и сверху вниз.

Менеджеркомпоновки − это способ, которым панель решает, где поместитьуправляющий элемент на форме. Если запустить приведенный апплет,при нажатии кнопки ничего не произойдет, потому что необходимонаписать код для реагирования на это событие. Способ, которым этосовершается в компонентах Swing − это интерфейс (графические компоненты) и реализация (код, который запускается при возникновениисобытия). С одним компонентом может быть связано несколько событий. Каждое событие содержит сообщение, которое может быть обработано в разделе реализации.При использовании компонента JButton определяется событие,связанное с нажатием кнопки.

Для регистрации заинтересованностиблока прослушивания в этом событии вызывается методaddActionListener() класса JButton. Этот метод ожидает аргумент,являющийся объектом, реализующим интерфейс ActionListener. Интерфейс содержит единственный метод actionPerformed(), которыйнужно реализовать. Таким образом для присоединения кода кJButton, необходимо реализовать интерфейс ActionListener в классеи зарегистрировать объект этого класса в JButton черезaddActionListener(). Метод будет вызван при нажатии кнопки.Для иллюстрации результата нажатия кнопки используем компонент JTextField. Это поле, где может размещаться текст или текстможет быть изменен. Хотя есть несколько способов созданияJTextField, самым простым является сообщение конструктору нуж44ной ширины текстового поля.

Как только JTextField помещается наформу, можно изменять содержимое, используя метод setText().//пример #3 : ответ на нажатие кнопки : MyButton2.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyButton2 extends JApplet implements ActionListener{ String msg;JButton yes, no;JTextField txt;public void init() {yes = new JButton ("да");no = new JButton ("нет");txt = new JTextField(12);Container c = getContentPane();c.setLayout(new FlowLayout());c.add(yes);c.add(no);c.add(txt);yes.addActionListener(this);no.addActionListener(this);}public void actionPerformed(ActionEvent ae) {String str = ae.getActionCommand();if (str.equals("да")) msg = "нажата кнопка <да> ";else msg = " нажата кнопка <нет> ";txt.setText(msg);}}Создание JTextField и помещение его на панель − это действия,которые выполняются для любого компонента Swing.

Аргумент дляactionPerformed() представляет собой объект типа ActionEvent, содержащий всю информацию о событии. В примере JButton.getText()возвращает текст, который есть на кнопке, и помещает в JTextField.В методе init() используется addActionListener() для регистрации события обеих кнопок.Классы-адаптерыЭти классы содержат пустую реализацию всех методов из интерфейсов прослушивания событий, которые они расширяют. При этом45производится обработка только некоторых из событий, предоставляемых конкретным интерфейсом прослушивания. Определяется новыйкласс, действующий как блок прослушивания событий, расширяяодин из имеющихся адаптеров и реализуя только те события, которыетребуется обрабатывать.Например, класс MouseMotionAdapter имеет два метода:mouseDragged(), mouseMoved(). Сигнатуры этих пустых методовточно такие же, как в интерфейсе MouseMotionListener.

Характеристики

Тип файла
PDF-файл
Размер
705,51 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6376
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее