关于java中exception的一些想法
程序员文章站
2022-03-13 09:38:24
...
数据库大作业中有一个用户登录函数,我密码错误的情况下依旧能够登录进去,而"密码错误"的报错只出现在控制面板中
后来在询问同学后,修改代码如下
public BeanUser login(String userid, String pwd) throws BaseException {
// TODO Auto-generated method stub
if (pwd==null||"".equals(pwd)) {
throw new BusinessException("密码不能为空");
}
else if (userid==null||"".equals(userid)) {
throw new BusinessException("用户名不能为空");
}
Session session = HibernateUtil.getSession();
org.hibernate.Transaction transaction = session.beginTransaction();
BeanUser beanUser = new BeanUser();
try {
beanUser = session.get(BeanUser.class, userid);
if(beanUser==null) {
throw new BaseException("用户不存在");
}
//比较密码
if(beanUser.getUserPwd().equals(pwd)==false) {
throw new BaseException("密码错误");
}
transaction.commit();
} catch (SessionException e) {
// TODO: handle exception
e.printStackTrace();
throw new BaseException("登录失败");
}finally {
if(session!=null) {
try {
session.close();
} catch (SessionException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
return beanUser;
}
在try-catch中,写成catch (Exception e)会弹出登录失败,而写成catch (SessionException e)会弹出密码错误,一开始想不明白,后来发现是因为我java没学好,????
BaseException不会被catch (SessionException e)捕获,但是会被catch (Exception e)捕获.所以用catch (SessionException e)会输出密码错误,但是用catch (Exception e)会显示登录失败
上一篇: 给个n,求1到n的所有数的约数个数的和~
下一篇: 输出1到100之间的质数