实验目的:
在Eclipse下编辑、编译、运行、调试简单的Java程序 。
实验内容:
用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。
例如:用户密码的合法化验证。
要求密码有4-6个数字组成。若长度不落在这个范围或不是有数字组成。抛出自己的异常。
要求:
1.面向对象编程。
2.异常定义,抛出,捕捉三个流程。
源程序:
package sy5;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import sy3.sy3.passwordexception;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class PasswordException extends Exception{
public PasswordException(String msg) {
super(msg);
}
}
class Users {
String name;
String password;
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) {
PasswordException e = new PasswordException("密码长度不在4-6位数字范围中");
throw e;
}
else if (!p.matches("\\d+")) {
PasswordException e = new PasswordException("密码必须由数字组成");
throw e;
}
}
}
public class sy5 extends JFrame implements ActionListener {
private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JLabel lblNewLabel_2;
private JTextField textField_2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
sy5 frame = new sy5();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public sy5() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();
textField.setBounds(195, 106, 117, 21);
contentPane.add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(196, 142, 117, 21);
contentPane.add(textField_1);
textField_1.setColumns(10);
JButton btnNewButton = new JButton("\u786E\u8BA4");
btnNewButton.addActionListener(this);
btnNewButton.setFont(new Font("楷体", Font.PLAIN, 16));
btnNewButton.setBounds(140, 212, 97, 23);
contentPane.add(btnNewButton);
JLabel lblNewLabel = new JLabel("\u8BF7\u8F93\u5165\u5BC6\u7801\uFF1A");
lblNewLabel.setFont(new Font("楷体", Font.PLAIN, 16));
lblNewLabel.setBounds(85, 110, 131, 15);
contentPane.add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("\u9A8C\u8BC1\u4FE1\u606F\uFF1A");
lblNewLabel_1.setFont(new Font("楷体", Font.PLAIN, 16));
lblNewLabel_1.setBounds(88, 142, 96, 15);
contentPane.add(lblNewLabel_1);
lblNewLabel_2 = new JLabel("\u7528\u6237\u540D\uFF1A");
lblNewLabel_2.setFont(new Font("楷体", Font.PLAIN, 16));
lblNewLabel_2.setBounds(85, 72, 90, 15);
contentPane.add(lblNewLabel_2);
textField_2 = new JTextField();
textField_2.setBounds(195, 66, 115, 21);
contentPane.add(textField_2);
textField_2.setColumns(10);
}
protected void loginActionPerformed(ActionEvent evt) {
String name=textField_2.getText();
String str=textField.getText();
Users test = new Users();
try {
test.test(name,str);
String m ="密码设置成功!";
textField_1.setText(m);
} catch (PasswordException e) {
// TODO Auto-generated catch block
e.printStackTrace();
String m = e.toString();
textField_1.setText(m);
}
}
public void actionPerformed(ActionEvent e) {
loginActionPerformed(e);
}
}
实验结果与体会:
结果:当用户在提示输入的文本框里输入用户名以及4~6位以内的任意数字密码时,再点击确认,就可以在下面的框中得到相对应的提示。
例如:
而当用户输入错误的密码格式时,就会出现如下图示的提示错误的信息:
体会:通过本次实验,我了解了异常处理机制,掌握异常处理的设计方法,以及自定义异常的方法。