CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

函数传参中的 final

楼主supergerm(超级细菌)2005-04-03 13:08:18 在 Java / J2SE / 基础类 提问

假设:  
          KK   是一个对象的引用,a、b   都是   KK   的数据成员,将KK以参数形式传递给一个函数。  
  问题:  
          如何做,才能防止   a、b   在函数中被修改? 问题点数:20、回复次数:15Top

1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-03 13:13:40 得分 0

你的标题已经给出了答案啊Top

2 楼F1in2003(无敌超级赛亚人)回复于 2005-04-03 13:21:32 得分 0

自问自答?Top

3 楼midthinker(呵呵)回复于 2005-04-03 13:26:08 得分 0

final能够相当不错的解决问题,但是如果可以得到a,b中真正关心的简单数据类型的话,还是建议利用简单数据类型作为参数传递。  
  @.@||~Top

4 楼supergerm(超级细菌)回复于 2005-04-03 13:26:42 得分 0

NO!   你们误解了。。。我知道在参数中用   final   但不知道用在哪个位置,请给个例子可以吗?Top

5 楼supergerm(超级细菌)回复于 2005-04-03 13:28:25 得分 0

To:   midthinker(思索者)    
      你误解我的意思了。。我是要把   对象传到函数里面去,   a、b   只是举个例子罢了。对于   传进的那个对象,我是不想让函数修改他所有的成员。Top

6 楼irvine007(┣━┫Rvine)回复于 2005-04-03 13:30:16 得分 10

void   fun(final   KK   x)  
  ~~~~~~~~~~~~~~~~~~这里的final只说明x不能赋予新的KK对象。  
  如果a,b是public,人家还是可以修改的。  
  好的方法是,你要使用private或protected保护起来。  
  Top

7 楼supergerm(超级细菌)回复于 2005-04-03 13:38:07 得分 0

是的,正因为   (final   KK   x)   这是使   KK   这个引用看成了“常量”,而不是内部的对象。我现在就是想问如何能使这个对象成为“常量”呢?  
   
  还是没有这种方法??Top

8 楼vgvg(上帝在关闭一扇窗的同时,在别处打开了一扇门。可这扇门迟迟不开,我只好破门而入!)回复于 2005-04-03 13:39:33 得分 0

 
  class   KK{  
  final   int   a=0;  
  final   int   b=0;  
  }  
   
   
  class   Test{  
  public   static   void   main(String[]   arg){  
  KK   k0=new   KK();  
  method(k0);  
  }  
   
  static   void   method(KK   k){  
    //k.a=1;  
    //k.b=2;  
  }  
  }  
   
   
  -----------------  
  class   KK{  
  private   int   a;  
  private   int   b;  
  }  
   
   
  class   Test{  
  public   static   void   main(String[]   arg){  
  KK   k0=new   KK();  
  method(k0);  
  }  
   
  static   void   method(KK   k){  
  //k.a=1;  
  //k.b=2;  
  }  
  }Top

9 楼escalj(天行健,君子以自强不息)回复于 2005-04-03 13:40:12 得分 0

?!Top

10 楼supergerm(超级细菌)回复于 2005-04-03 13:52:34 得分 0

??没看懂Top

11 楼supergerm(超级细菌)回复于 2005-04-03 17:27:34 得分 0

还有没有人可以解释下了?Top

12 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-03 17:38:11 得分 0

by   value  
  即使不用final也改不了x(x的a和b可以改)  
   
  class   KK{  
    private   int   a;  
    private   int   b;  
    public   KK(int   a,int   b){  
        this.a   =   a;  
        this.b   =   b;  
    }  
  }  
   
  void   f(KK   x){  
      x.setA(1);  
      x.setB(2);     //如果不提供set方法,就不能改了  
  }Top

13 楼supergerm(超级细菌)回复于 2005-04-03 18:02:04 得分 0

不。。您也没理解我的意思。。。。我的意思是,在公有的情况下,就是不想让他被改。。。因为某些时候,有必要用的。Top

14 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-03 18:34:40 得分 10

那做不到  
   
  java并没有像其它语言提供readonly的支持。Top

15 楼supergerm(超级细菌)回复于 2005-04-04 11:05:45 得分 0

哦。好吧。谢谢大家。结帖了。Top

相关问题

  • main函数中的参数?
  • 请一函数程序!函数中的参数
  • main函数中的参数args[]???
  • javesript函数中,参数如何传址
  • 函数FREELIBRARYANDEXITTHREAD中第二参数问题
  • TfileStream中的read函数参数疑惑?
  • 如果main函数中有参数....
  • c 中main 函数的参数argc argv[]
  • vc中,在一个函数内部如何得到函数名和函数参数,将其打印出来?
  • vc++7.0中,在一个函数内部如何得到函数名和函数参数,将其打印出来?

关键词

  • 函数
  • 修改
  • 数据
  • kk
  • 对象
  • 参数
  • final
  • 意思
  • 方法
  • method

得分解答快速导航

  • 帖主:supergerm
  • irvine007
  • kingfish

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo