日期:2014-05-20  浏览次数:20873 次

抛出异常的实现问题
写法1
                  public   static   Object   copyBean(Object   srcObj)   throws   Exception
{

Object   desObj=srcObj.getClass().newInstance();
                    BeanUtils.copyProperties(desObj,srcObj);
return   desObj;
}


写法2

public   static   Object   copyBean(Object   srcObj)  
{
// Object   desObj=new   Object();
Object   desObj=null;
try
{
desObj   =   srcObj.getClass().newInstance();
}
catch   (InstantiationException   e1)
{
//   TODO   Auto-generated   catch   block
e1.printStackTrace();
}
catch   (IllegalAccessException   e1)
{
//   TODO   Auto-generated   catch   block
e1.printStackTrace();
}
try
{
BeanUtils.copyProperties(desObj,srcObj);
}
catch   (IllegalAccessException   e)
{
//   TODO   Auto-generated   catch   block
e.printStackTrace();
}
catch   (InvocationTargetException   e)
{
//   TODO   Auto-generated   catch   block
e.printStackTrace();
}
return   desObj;
}

我很想知道,   写法1和写法2在实际应用中有什么不同,   主要集中在,既然统一抛出一个Exception就可以了,为什么要catch那么多个Exception的子类,   我想这种做法,肯定是有原因的.请大家来说说.


------解决方案--------------------
方法1 本方法不提供对异常的catch,而是将异常抛给上层调用方法
写法2 本方法提供对 try{} 内异常的catch, 而且是对不同类型的异常如(InstantiationException, IllegalAccessException)与以捕获并处理,而不会将Exception抛给上层
------解决方案--------------------
如果用Exception,它就会把所有类型异常捕获,在运行时你就会不知道是抛出InstantiationException,IllegalAccessException等,针对不同的异常采取不同的处理方式
而不是一刀切