码家

Web Platform, Cloud and Mobile Application Development

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
网上看到以下内容:

final方法
将方法声明为final那有两个原因,
第一就是说明
你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,
并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。
第二就是允许编译器将所有对此方法的调用转化为inline(行内)调用的机制,
它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,
例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,
所以你要慎用final进行方法定义。

final类
当你将final用于类身上时,
你就需要仔细考虑,因为一个final类是无法被任何人继承的,
那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。
对于final类中的成员,你可以定义其为final,也可以不是final。
而对于方法,由于所属类为final的关系,自然也就成了final型的。
你也可以明确的给final类中的方法加上一个final,但这显然没有意义。

我想问的是   final类   中的   方法是不是一定是   final   方法啊???
如果是   final方法的话,执行的时候就和上述的   final方法一样,直接将方法主体插入到调用处,而不是进行例行的方法调。
 
 
 
 
final   class中所有成员都是隐性final的,加不加final关键字都一样。

但是final方法是否一定会被转化为“inline”方法,这是编译器决定的,程序员不需要考虑。

应该尽量从设计上考虑是否使用final,即从是否避免方法被继承上考虑。而不要仅仅为了得到一个“inline”方法而去使用final,因为对于编译器来说,这只是一个暗示,它并不保证一定会这样做。

 

 



final类是无法继承的,里边的方法,你根本无法改变它。不   final   也   final   啦。

 

 

大前提已经是final   中间   final不final都一样!

 

 

我的意思是:   如果final   class   里面的方法和   final   方法类似的话,
那么如果程序调用多次该方法就会使代码变长。
以后心中有个数。

第一次过来,看到这么热情,挺开心的,而且速度好快。
谢了!

 

 

对了,在C++   中有一个关键字叫   "const ".
在函数形参中,可以用const   去表示这个参数不能改.

在java中,我感觉一点必要多没有.
1)如果形参是基本类型
        因为是按值传递的,所以加了也白加.
2)如果形参是对象类型
        经过测试,java传递对象是按引用传递的,可是在函数中却不能改变传进来的那个形参的引用.
所以加不加还不一样????

 

 

 

楼主:我上面的不是说了吗:“final方法是否一定会被转化为“inline”方法,这是编译器决定的,程序员不需要考虑。”

 

关于final的形参,在Java中用途不大,但也不是完全没有用,至少可以限制值一旦被传入就不能在方法体内改变。

 

 

core   java中指出:
final类中的所有方法自动地成为final方法

 

 

 

Java的参数按值传递的,当然不能改变形参变量本身。

final形参的作用是:限制变量在方法体内不能改变。如:

void   f(final   int   i)   {
    i   =   100;   //   编译错误,i是final的
}

就是说i的值一旦被传入方法体内,就不能改变其值了,这相当于定义了一个final的局部变量。

 

 

 

牛人都说完了,我再补充一点哈,final形参的还有一个用途就是当一个内部局部类要调用形参的话,该形参必须为final,否则编译错误。
例如:
class   A
{
        void   aa(final   bb)
        {
                class   B
                {
                          B()   {   int   cc   =   bb;}   //倘若bb不为final的话,此处编译错误
                  }
          }
}

posted on 2011-11-01 10:20  海山  阅读(205)  评论(0编辑  收藏  举报