
Исключения (exceptions) в java
Исключение - это проблема(ошибка) возникающая во время выполнения программы. Исключения могут возникать во многих случаях, например:
Пользователь ввел некорректные данные.
Файл, к которому обращается программа, не найден.
Сетевое соединение с сервером было утеряно во время передачи данных.
И т.п.
Обработка исключительных ситуаций (exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма.
Синтаксис
В Java есть пять ключевых слов для работы с исключениями:
try - данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке.
catch - ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений.
finally - ключевое слово для отметки начала блока кода, которое является дополнительным. Этот блок помещается после последнего блока 'catch'. Управление обычно передаётся в блок 'finally' в любом случае.
throw - служит для генерации исключений.
throws - ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом.
Практическое задание
Тема практического задания: создать графический объект по номеру варианта, создать фреймовое окно, поместить графический объект на данную области и сделать возможность управления объектом с клавиатуры используя стрелки.
По варианту был выбран графический объект №12. Он предоставлен на рисунке 1.
Рисунок 1 Графический объект №12
Опишем в первом файле JavaPaint.java код для создания и отображение формы. Данный файл является ключевым файлом проекта. Он отображен на рисунке 2, а сам код на рисунке 3.
Рисунок 2 Ключевой файл проекта JavaPaint.java
package javapaint; public class JavaPaint { public static void main(String[] args) { NewJFrame njf = new NewJFrame(); // создание формы njf.setVisible(true); // отображение формы }} |
Рисунок 3 Код ключевого файла проекта JavaPaint.java
Во втором файле под названием «MyPanel.java описываем закрытые поля класаса с доступом только из данного файла, конструктор класса, переопределенный метод рисования, методы для чтения и записи свойств из других классов. Данный код в программе изображен на рисунке 4, а также код данного файл на рисунке 5.
Рисунок 4 Файл Mypanel.java
package javapaint; import java.awt.Color; import java.awt.Graphics; import java.awt.Panel; public class MyPanel extends Panel { /* Закрытые поля класса с доступом только из MyPanel.java */ private int rectX; private int rectY; private final int rectSize; /* Конструктор класса MyPanel */ public MyPanel() { rectSize = 150; // эталонный размер фигуры rectX = (500 - rectSize) / 2; // расположение прямоугольника по центру экрана (ось X) rectY = (500 - rectSize) / 2; // расположение прямоугольника по центру экрана (ось Y) } /* Переопределенный метод для рисования */ @Override public void paint(Graphics g) { g.setColor(Color.BLACK); g.fillOval(getRectX(), getRectY(), getRectSize(), getRectSize()); g.setColor(Color.BLUE); // установка цвета эллипса g.fillOval(getRectX() , getRectY() + getRectSize()/4, getRectSize(), getRectSize() /2); g.setColor(Color.RED); // установка цвета эллипса g.fillRect(getRectX() + getRectSize() / 3, getRectY() + getRectSize() / 3, getRectSize() / 3, getRectSize() / 3); } /* Методы для чтения и записи свойств из других классов */ public int getRectX() { return rectX; } public void setRectX(int rectX) { this.rectX = rectX; } public int getRectY() { return rectY; } public void setRectY(int rectY) { this.rectY = rectY; } public int getRectSize() { return rectSize; } } |
Рисунок 5 Код файла Mypanel.java
В третьем файле под название NewJFrame.java реализовано окно с панелью и заголовком, с кастомизацией и параметрами окна, рабочая область для работы с графическим объектом, а также алгоритм поведения объекта на нажатие клавиш на клавиатуре и его перерисовка. Частичный код в программе изображен на рисунке 6, а также полный код данного файл изображен на рисунке 7.
Рисунок 6 Файл NewJFrame.java
package javapaint; import java.awt.Color; import java.awt.event.KeyEvent; public class NewJFrame extends javax.swing.JFrame { MyPanel mp = new MyPanel(); // создание экземпляра класса с панелью public NewJFrame() { super("КР ООП, вариант 12, Сейфетдинов Р.Х."); // заголовок формы initComponents(); this.setLocationRelativeTo(null); // выравнивание окна по центру экрана mp.setBackground(Color.GRAY); // установка фонового цвета панели mp.setSize(500, 500); // установка размера панели mp.setLocation(0, 0); // установка положения панели add(mp); // добавление панели на форму } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false); addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { formKeyPressed(evt); }}); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 500, Short.MAX_VALUE)); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 500, Short.MAX_VALUE)); pack(); }// </editor-fold>//GEN-END:initComponents private void formKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyPressed switch (evt.getKeyCode()) { /* Обработка нажатия клавиш влево, вправо, вверх и вниз */ case KeyEvent.VK_LEFT: if (mp.getRectX() > 0) { mp.setRectX(mp.getRectX() - 5); // изменение положения фигуры } break; case KeyEvent.VK_RIGHT: if (mp.getRectX() < mp.getSize().width - mp.getRectSize()) { mp.setRectX(mp.getRectX() + 5); } break; case KeyEvent.VK_UP: if (mp.getRectY() > 0) { mp.setRectY(mp.getRectY() - 5); } break; case KeyEvent.VK_DOWN: if (mp.getRectY() < mp.getSize().height - mp.getRectSize()) { mp.setRectY(mp.getRectY() + 5); } break; } mp.repaint(); // перерисовка панели }//GEN-LAST:event_formKeyPressed
/** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager. getInstalledLookAndFeels()) { if ("Windows".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log( java.util.logging.Level.SEVERE, null, ex); } //</editor-fold>
/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NewJFrame().setVisible(true); } }); }
// Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } |
Рисунок 7 Код файла NewJFrame.java
После написания 3 файлов проекта произведем запуск данного приложения. Запущенное приложение изображено на рисунке 8, а наглядное поведение приложения на ввод с клавиатуры продемонстрировано на рисунке 9.
Рисунок 8 Запущенное приложение
Рисунок 9 Демонстрация работы приложения