一、实验目的
了解异常处理机制,掌握异常处理的设计方法。
二、实验内容
用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。
例:用户密码的合法化验证。
要求密码有4-6个数字组成。若长度不落在这个范围或不是有数字组成。抛出自己的异常。
要求:
1.面向对象编程。
2.异常定义,抛出,捕捉三个流程。
三、源程序
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
public class HandleException {
private JFrame jFrame;
private JTextField user;
private JTextField pwd;
private JLabel hint;
private JButton register;
private Image image;
public static void main(String[] args) {
HandleException handleException = new HandleException();
handleException.jFrame.setVisible(true);
}
public HandleException(){
initView();
}
private void initView(){
jFrame = new JFrame("************");
//设置图标
URL url =getClass().getResource("/res/icon.jpg");
image = new ImageIcon(url).getImage();
jFrame.setIconImage(image);
//不允许更改大小
jFrame.setResizable(false);
//指定位置大小
jFrame.setBounds(100,100,422,310);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
/**获取窗体的面板容器**/
Container container = jFrame.getContentPane();
//设置布局为null
container.setLayout(null);
container.setBackground(new Color(255,239,213));
/**添加提示标签和账户输入框**/
user = new JTextField();
user.setBounds(175,79,100,20);
user.setColumns(10);
container.add(user);
//标签
JLabel username = new JLabel("username:");
username.setBounds(92,79,100,20);
container.add(username);
/**添加提示标签和密码输入框**/
pwd = new JTextField();
pwd.setBounds(175,139,100,20);
pwd.setColumns(10);
container.add(pwd);
JLabel password = new JLabel("password:");
password.setBounds(92,139,100,20);
container.add(password);
/**添加异常显示标签**/
hint = new JLabel("Welcome to register!(●ˇ∀ˇ●)");
hint.setBounds(107,238,300,20);
container.add(hint);
/**添加注册按钮**/
register = new JButton("Register");
register.setBounds(130,190,100,20);
//点击事件
register.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
try {
detection();
hint.setText("Register Successfully");
} catch (MyException e) {
if (e.getFlag() == 1){
hint.setText("Please use 4-6 digit numeric password");
}else if (e.getFlag() == 2){
hint.setText("The password length is 4-6");
}else if (e.getFlag() == 3){
hint.setText("Use only numeric passwords");
}
e.printStackTrace();
}
}
});
container.add(register);
}
/**
* 判定密码并抛出异常
* @throws MyException
*/
private void detection()throws MyException{
String string = pwd.getText().toString();
if (!isNumeric(string) && ((string.length()<4) || (string.length()>6))){
throw new MyException(1);
}else if ((string.length() > 6 || string.length() < 4)){
throw new MyException(2);
}else if (!isNumeric(string)){
throw new MyException(3);
}
}
/**
* 检测是否全为数字
* @param s
* @return
*/
private boolean isNumeric(String s){
for (int i=0;i<s.length();++i){
if (!Character.isDigit(s.charAt(i))){
return false;
}
}
return true;
}
}
/**
* 自定义异常类
*/
class MyException extends Exception {
private int flag;
public MyException(int flag){
super();
this.flag = flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public int getFlag() {
return flag;
}
}
四、实验结果