Java实训学习笔记07---自定义异常
- 例子
- 自定义一个异常---新建MyException类
- 自定义异常类的使用---修改Test.java
- 执行结果
- 使用自定义异常重构项目
- 新建exception包和SubjectExcpetion类
- 所有的异常处理---全部在service进行处理
- 修改SubjectSerivice.java
- 修改UserSerivice.java
在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。
自定义异常类只需从Exception类或者它的子类派生一个子类即可。自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
自定义异常的步骤:
(1)继承 Exception 或 RuntimeException
(2)提供一个有参构造方法—赋值异常信息
(3)重写getMessage方法
使用异常机制的建议:
1.要避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下。
2.处理异常不可以代替简单测试—只在异常情况下使用异常机制。
3.不要进行小力度的异常处理—应该将整个任务包装在一个try语句块中。
4.异常往往在高层处理(先了解!后面做项目会说!) 。
例子
自定义一个异常—新建MyException类
package com.chengxian.test;
/**
* 自定义异常
* @author 74670
*
*/
public class MyException extends Exception{
private String msg;
public MyException(String msg){
this.msg=msg;
}
@Override
public String getMessage(){
return msg;
}
}
自定义异常类的使用—修改Test.java
如果自定义异常是为了提示,一定要用try…catch,不要直接用throw往外抛。这样只能被框架捕获。
package com.chengxian.test;
public class Test {
/**
* @param args
* @throws ClassNotFoundException
* @throws InstantiationException
* @throws IllegalAccessException
*/
public static void main(String[] args){
try{
newIn();
}catch(MyException e){
System.out.println(e.getMessage());
}
}
public static void newIn() throws MyException{
//常规实例化对象
Person person =new Person();
System.out.println("person="+person);
//反射
String className="com.chengxian.test.Person123";
Class clazz=null;
try{
clazz=Class.forName(className);
}catch(ClassNotFoundException e){
throw new MyException("找不到对应的类");
}
}
}
仅仅为了提示,又不想自定义一个Exception,可以用RuntimeException。这个可以抛出异常,并准确定位,缺点是不能处理这个异常,自定义异常的话可以捕获并且处理。
执行结果
使用自定义异常重构项目
新建exception包和SubjectExcpetion类
package com.chengxian.subject05.exception;
/**
* 自定义异常
* @author 74670
*
*/
public class SubjectException extends Exception{
private String msg;//异常信息
public SubjectException(String msg){
this.msg=msg;
}
public String getMessage(){
return msg;
}
}
所有的异常处理—全部在service进行处理
修改SubjectSerivice.java
package com.chengxian.subject05.service;
import java.sql.SQLException;
import java.util.List;
import com.chengxian.subject05.dao.SubjectDao;
import com.chengxian.subject05.exception.SubjectException;
import com.chengxian.subject05.factory.ObjectFactory;
import com.chengxian.subject05.pojo.Subject;
/**
* 业务层
* @author Administrator
*
*/
public class SubjectService {
//private SubjectDao subjectDao = new SubjectDao();
private SubjectDao subjectDao=(SubjectDao)ObjectFactory.getObject("subjectDao");
/**
* 添加毕设信息
* @param subject
* @return
* @throws SubjectException
*/
public boolean addSubject(Subject subject) throws SubjectException{
boolean flag=false;
try {
flag= subjectDao.addSubject(subject);
} catch (SQLException e) {
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return flag;
}
/**
* 查询所有毕设信息
* @return
* @throws SubjectException
*/
public List<Subject> querySubjects() throws SubjectException{
List<Subject> subjectList=null;
try {
subjectList= subjectDao.queryAllSubject();
} catch (SQLException e) {
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return subjectList;
}
/**
* 根据编号id修改毕设题目信息
* @return
* @throws SubjectException
*/
public boolean updateTitleById(String title, int id) throws SubjectException{
boolean flag=false;
try {
flag= subjectDao.updateTitleById(title, id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return flag;
}
/**
* 根据编号id删除对应的毕设信息
* @param id
* @return
* @throws SubjectException
*/
public boolean delSubjectById(int id) throws SubjectException{
boolean flag=false;
try {
flag= subjectDao.delSubject(id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return flag;
}
/**
* 未被选择的条数
* @return
* @throws SubjectException
*/
public int unSelectedNumber() throws SubjectException{
int count=0;
try {
count= subjectDao.unSelectedNumber();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return count;
}
/**
* 判断该学生是否已经选择过毕设题目
* @param stuNo
* @param stuName
* @return
* @throws SubjectException
*/
public boolean isSelected(String stuNo, String stuName) throws SubjectException{
boolean flag=false;
try {
flag= subjectDao.isSelected(stuNo, stuName);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return flag;
}
/**
* 判断随机编号是否可用
* @param number
* @return
* @throws SubjectException
*/
public boolean isUser(int number) throws SubjectException{
boolean flag = false;
List dataList;
try {
dataList = subjectDao.isUser(number);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
if(null != dataList && dataList.size()>0){
Subject subject = (Subject) dataList.get(0);
flag = subject.getState().equals("0");
}
return flag;
}
}
每个都要修改,一个对应一个。
修改UserSerivice.java
package com.chengxian.subject05.service;
import java.sql.SQLException;
import com.chengxian.subject05.dao.UserDao;
import com.chengxian.subject05.exception.SubjectException;
import com.chengxian.subject05.factory.ObjectFactory;
public class UserService {
//private UserDao userDao = new UserDao();
private UserDao userDao=(UserDao)ObjectFactory.getObject("userDao");
/**
* 登录
* @param stuNo
* @param pwd
* @return
* @throws SubjectException
*/
public boolean login(String stuNo, String pwd) throws SubjectException{
boolean flag=false;
try {
flag= userDao.queryByUnameAndPwd(stuNo, pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new SubjectException("数据库异常");
}
return flag;
}
}