<>实验目的 :

(1) 学会创建自己的异常类;
(2) 掌握如何使用自己的异常类;
(3) 了解简单的对话框 JOptionpane 类的用法。

<>实验任务 :

要求设计一个 GUI 图形窗口程序 , 该程序让用户输入一个星期中的任意一天的数字1 到 7, 然后输出该数字所对应的是星期几。
但是当用户输入的数字不在 l 到 7 范围内时 , 程序应该弹出一个对话框以显示发生了异常。

<>实验步骤:

(1) 分析实验任务 , 尽管 Java 中有 ArithmeticException,NumberFormatException等异常类 ,
但并没有这里想要的异常类 , 因此用户必须设计自己的异常类 BadDataException 以处理上述情况。同时还要设计一个主类 BadDataDays
以运行这个程序 , 该主类应包含一个 getDayName(int dayNumber) 方法以根据输入值返回星期几 , 在这个方法中应该使用一个
switch 语句来判断 , 并在 switch 块的 default 语句处 Throw 抛出用户的 BadDataException 异常。
(2) 程序清单 6-3 是主类 BadDataDays 的程序模板 , 请完成|代码 1|~ |代码 6| 的程序部分 , 并输入这个程序以运行它。
程序清单 2-3 BadDataDays.java
// BadDataDays.java import java.awt.*; // Container, GridLayout import java.awt
.event.*; // ActionListener import javax.swing.*; public class BadDataDays
extends JFrame implements ActionListener { private JTextField dayNumberField,
dayNameField; private int dayNumber; private String dayName; public BadDataDays(
) { super( " 代码1 " ); Container container = getContentPane(); container.
setLayout( new GridLayout( 2 , 2 ) ); container.add( new JLabel( "输入数字 ",
SwingConstants.RIGHT ) ); 代码2 // 创建一个JTextField控件 dayNumberField container.add(
dayNumberField); dayNumberField.addActionListener( this ); container.add(new
JLabel( "星期几 ", SwingConstants.RIGHT ) ); dayNameField = new JTextField( 10 );
代码3 // 将控件dayNameField 加入到容器中 代码4 // 设置窗口的大小为 (425,100) setVisible( true ); }
public void actionPerformed( ActionEvent event ) { dayNameField.setText( "" );
try { dayNumber = Integer.parseInt( dayNumberField.getText() ); dayName =
getDayName(dayNumber); 代码5 // 在控件dayNameField中输出结果 } catch (BadDataException ex)
{ JOptionPane.showMessageDialog( BadDataDays.this, ex.toString(), "无效日期",
JOptionPane.WARNING_MESSAGE ); } catch (NumberFormatException ex) { System.out.
println("I detected Exception " + ex.toString()); } } public String getDayName(
int dayNumber) throws BadDataException { 代码6 // 此处加入switch 语句块以根据输入值dayNumber
判断星期几, // 并在default处Throw抛出BadDataException异常 } public static void main( String
args[] ) { BadDataDays application = new BadDataDays(); application.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
点评 该程序的关键是用户设计了自己的异常类BadDataException,它继承自运行期异常类RuntimeException
,通常自定义的异常类都是继承自Exception或
RuntimeException,当异常发生时,通过Throw语句抛出这个异常的实例,然后就像捕获一般异常一样进行处理。记住,对自定义异常系统是不会自动抛出的,必须由程序员手动抛出。

<>完整程序代码
import java.awt.*; // Container, GridLayout import java.awt.event.*; //
ActionListener import javax.swing.*; public class BadDataDays extends JFrame
implements ActionListener { private JTextField dayNumberField, dayNameField;
private int dayNumber; private String dayName; public BadDataDays() { super(
"数字在1-7"); Container container = getContentPane(); container.setLayout(new
GridLayout(2, 2)); container.add(new JLabel("输入数字 ", SwingConstants.RIGHT)); //
代码2 创建一个JTextField控件 dayNumberField dayNumberField = new JTextField(10);
container.add(dayNumberField); dayNumberField.addActionListener(this); container
.add(new JLabel("星期几 ", SwingConstants.RIGHT)); dayNameField = new JTextField(10
); // 代码3 将控件dayNameField 加入到容器中 container.add(dayNumberField); // 代码4 设置窗口的大小为
(425,100) setSize(425, 100); this.setVisible(true); } public void
actionPerformed( ActionEvent event ) { dayNameField.setText( "" ); try {
dayNumber= Integer.parseInt( dayNumberField.getText() ); dayName = getDayName(
dayNumber); // 代码5 在控件dayNameField中输出结果 dayNameField.setText(dayName); }catch (
BadDataException ex){ JOptionPane.showMessageDialog(BadDataDays.this, ex.
toString(), "无效日期", JOptionPane.WARNING_MESSAGE ); } catch (
NumberFormatException ex) { System.out.println("I detected Exception " + ex.
toString()); } } public String getDayName(int dayNumber) throws BadDataException
{ // 代码6 此处加入switch 语句块以根据输入值dayNumber 判断星期几, //
并在default处Throw抛出BadDataException异常 switch (dayNumber) { case 1: return "星期一";
case 2: return "星期二"; case 3: return "星期三"; case 4: return "星期四"; case 5: return
"星期五"; case 6: return "星期六"; case 7: return "星期日"; default: throw new
BadDataException(dayNumber); } } public static void main(String args[]) {
BadDataDays application= new BadDataDays(); application.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE); } } class BadDataException extends RuntimeException{
public BadDataException() {} public BadDataException(int dayNumber) throws
BadDataException{ if(dayNumber< 1 || dayNumber >7) throw new BadDataException();
} public String toString() { return"转换数字必须在1至7之间!"; } }

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信