<>实验目的 :
(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之间!"; } }