Java软件低级错误(九 ):Java参数传递:传值还是传引用?

本文探讨了Java中异常处理的细节,特别是如何正确处理和修改异常对象,避免因对象传递方式不当导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 解读:
对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没有改变。
      对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象

 

案例:

问题代码:

catch (Exception ex)
{
    processException(ex);
    request.setAttribute("exception", ex);
    ... ...
    forwardURL(CmdBusi.URL_ERROR, request, response);
}
... ...
public void processException(Exception e)
{
    String message=e.getLocalizedMessage();
    if(message.indexOf("ORA-00001")!=-1)
    {
       message = “... ...”;
       e = new Exception(message);
    }
}

processException(ex)方法调用结束后,ex并没有指向在processException中新生成的对象,所以对于ex的修改也就前功尽弃了。

正确代码:

正确的写法:增加返回值,将e作为返回值返回:
catch (Exception ex)
{
    request.setAttribute("exception", processException(ex));
    ... ...
    forwardURL(CmdBusi.URL_ERROR, request, response);
}
... ...
 
public Exception processException(Exception e)
     {
   String message = e.getLocalizedMessage();
 if (message.indexOf("ORA-00001") != -1)
 {
  message = "... ...";
  return new Exception(message);
 }
 return e;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值