Java学习笔记之自定义异常处理

实验内容

用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。
例如:用户密码的合法化验证。
要求密码有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("");

	}
}

程序运行截图

用户名为空
Java学习笔记之自定义异常处理_第1张图片
密码为空
Java学习笔记之自定义异常处理_第2张图片
密码长度不在4-6位内
Java学习笔记之自定义异常处理_第3张图片
密码未由纯数字组成
Java学习笔记之自定义异常处理_第4张图片
用户名或密码错误
Java学习笔记之自定义异常处理_第5张图片
登录成功
Java学习笔记之自定义异常处理_第6张图片

实验体会

不做细讲自由发挥吧

你可能感兴趣的:(Java学习笔记之自定义异常处理)