Скачиваний:
3
Добавлен:
27.11.2024
Размер:
551.19 Кб
Скачать

Исключения (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 Демонстрация работы приложения