Java Final

Final 关键字用法:

个人感觉,Final关键字就是C中的const 关键字,但是目前不知道他们之间的区别,有待发现.

Final 在Java中 表达两个意思 1,我不想改变。2,效率问题。可以修饰三个 数据,方法,类。

Final数据:

1. 在编译时是常量,不会改变

2. 在运行时初始化一次以后不想被改变

在上述两个条件下都是用Final修饰的,Final修饰的数据可以再编译的时候植入各种表达式中,减少运行时的开销,提高效率。

被修饰的必须是基本数据类型;

一个即是static又是Final的区域只占用一段不能改变的存储空间,被修饰的变量必须大写;

static 表示只能有一份,Final表示是一个常量,是运行时候是个常量,编译的时候不一定.

通过以上可以看到 和C中const非常相似.

Final方法:

使用final方法有两个原因。第一个原因是把方法锁定,以防止任何继承它的类修改它的含义,这是出于设计的考虑

想要确保在继承中使用的方法保持不变,并且不会被覆盖。

过去建议使用final方法的第二个原因是效率。在java的早期实现中,如果将一个方法指明为fianl,就是同意编译器将针对该方法的所有调用都转为内嵌调用。当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常的调用方式而执行方法调用机制(将参数压入栈,跳至方法代码处执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的实际代码的副本来代替方法调用。这将消除方法调用的开销。当然,如果一个方法很大,你的程序代码会膨胀,因而可能看不到内嵌所带来的性能上的提高,因为所带来的性能会花费于方法内的时间量而被缩减。

上面一段说的意思也就是和C中的 inline 含义一样.

"覆盖"只有在某方法是基类接口的一部分时才会发生。即,必须将一个对象向上转型为它的基类并条用相同的方法。如果某方法是private的,它就不是基类接口的一部分。它仅是一些隐藏于类中的程序代码,如果一个基类中存在某个private方法,在派生类中以相同的名称创建一个public,protected或包访问权限方法的话,该方法只不过是与基类中的方法有相同的名称而已,并没有覆盖基类方法。由于private方法无法触及且有很好的隐藏性,所以把它看成是因为他所属类的组织结的原因而存在外,其他任何事物都不用考虑。

Final 类:

当将类定义为final时,就表明了你不打算继承该类,而且也不也许别人这样做。换句话说,出于某种考虑,你对该类的设计永不需要做任何变动,或者出于安全的考虑,你不希望他有子类。

请注意,final类的域可以根据个人的意愿选择是或不是final。不论类是否被定义为final,相同的规则同样适用于定义为final的域。然而,由于final是无法继承的,所以被final修饰的类中的方法都隐式的制定为fianl,因为你无法覆盖他们。在fianl类中可以给方法添加final,但这不会产生任何意义。

http://blog.csdn.net/niguang09/article/details/6035813

如果心胸不似海,又怎能有海一样的事业。

Java  Final

相关文章:

你感兴趣的文章:

标签云: