实验内容
用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。
例如:用户密码的合法化验证。
要求密码有4-6个数字组成。若长度不落在这个范围或不是有数字组成。抛出自己的异常。
要求:
1.面向对象编程。
2.异常定义,抛出,捕捉三个流程。
实验目的
1.了解异常处理机制,掌握异常处理的设计方法。
2. 掌握自定义异常的方法
使用工具及环境
环境:Windows 10;jdk 1.8;
工具:eclipse
源代码
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;
import javax.swing.JPasswordField;
/**
* 密码检测异常
* @author Jason
*
*/
class PasswordException extends Exception{
/**
*
*/
private static final long serialVersionUID = 5077534889257319549L;
public PasswordException(String msg) {
super(msg);
}
}
/**
* 密码检测方法
* @author Jason
*
*/
class PasswordTest {
public void test(String n,String p) throws PasswordException {
if(n == null || n.length() <= 0) {
PasswordException e = new PasswordException("用户名不能为空");
throw e;
}
else if(p == null || p.length() <= 0) {
PasswordException e = new PasswordException("密码不能为空");
throw e;
}
else if(p.length()<4||p.length()>6) { //密码不为4-6位数字
PasswordException e = new PasswordException("密码长度不在范围内");
throw e;
}
else if (!p.matches("\\d+")) {
PasswordException e = new PasswordException("密码必须由数字组成");
throw e;
}
}
}
public class login extends JFrame {
/**
*
*/
private static final long serialVersionUID = -5772782032784101569L;
private JPanel contentPane;
private JTextField textField;
private JPasswordField passwordField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
login frame = new login();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public login() {
setResizable(false);
setTitle("\u7528\u6237\u767B\u5F55\u7A97\u53E3");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 279);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel label = new JLabel("\u7528\u6237\u540D");
label.setIcon(new ImageIcon(login.class.getResource("/com/sun/java/swing/plaf/windows/icons/Computer.gif")));
label.setFont(new Font("宋体", Font.BOLD, 15));
label.setBounds(57, 41, 95, 30);
contentPane.add(label);
JLabel label_1 = new JLabel("\u5BC6 \u7801");
label_1.setIcon(new ImageIcon(login.class.getResource("/javax/swing/plaf/metal/icons/ocean/computer.gif")));
label_1.setFont(new Font("宋体", Font.BOLD, 15));
label_1.setBounds(57, 116, 78, 16);
contentPane.add(label_1);
textField = new JTextField();
textField.setBounds(164, 45, 174, 22);
contentPane.add(textField);
textField.setColumns(10);
JButton button = new JButton("\u767B\u5F55");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loginActionPerformed(e);
}
});
button.setBounds(61, 180, 103, 25);
contentPane.add(button);
JButton button_1 = new JButton("\u91CD\u7F6E");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetValueActionPerformed(e);
}
});
button_1.setBounds(261, 180, 103, 25);
contentPane.add(button_1);
passwordField = new JPasswordField();
passwordField.setBounds(164, 113, 174, 22);
contentPane.add(passwordField);
}
/**
* 登录
*
* @param e
*/
protected void loginActionPerformed(ActionEvent evt) {
String name = this.textField.getText();
String pwd = new String(this.passwordField.getPassword());
PasswordTest test = new PasswordTest();
try {
test.test(name,pwd);
if (name.equals("admin") && pwd.equals("1234")) {
JOptionPane.showMessageDialog(null, "登录成功");
} else
{JOptionPane.showMessageDialog(null, "用户名或密码错误");}
} catch (PasswordException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
/**
* 重置
*
* @param evt
*/
protected void resetValueActionPerformed(ActionEvent evt) {
this.textField.setText("");
this.passwordField.setText("");
}
}
程序运行截图
用户名为空
密码为空
密码长度不在4-6位内
密码未由纯数字组成
用户名或密码错误
登录成功
实验体会
不做细讲自由发挥吧