《Java程序设计》实 验 报 告(二)——异常

实验名称: 异常处理

所使用的工具软件及环境:
环境:Windows 8.1;jdk 1.8;
工具:eclipse

实验目的:

了解异常处理机制,掌握异常处理的设计方法。

实验内容:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验结果与体会:

通过实验,对于程序编写的整个逻辑严密性有了更加深入的了解,理解到在编写程序时候不仅仅只照顾到自己想要实现的效果而忽视一些可能因为用户使用不当而造成的出乎意料的后果,必须能够全面考虑,将可能出现的差错通过异常机制进行及时的排查和提前检出。

同时实验的训练也大大强化了我对java库中关于exception类的理解,对于try,catch,throw等操作有了更加深入的理解,为以后编写更多更大更繁杂的程序打下了坚实的改错,防错的功底。

而且,同时实际操作java异常操作也更能理解oop的编程思想,将不同功能块通过类的形式进行拆分和再整合,而不是在各个类内进行所谓if语句判错。使得整个程序有了更加良好的可阅读性,可扩展性,可维护性,健壮性。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值