1:问题的产生背景
2:分析情况
3:案例测试
4:总结
1:问题产生的原因
在查看J2ME api 中我们常常会发现一些类甚至方法,字段都被声明成了final的!那么为什么会这么声明呢 ?这样声明有什么好处吗?
2:我个人喜欢在遇到困难的时候总是第一时间去看那本JAVA 圣经《THINKING IN JAVA》在这里找到了答案,现在归纳如下:
①:当修饰的是一个数据时 :
a:如果此数据是一个主类型的数据那么表示此数据是一个常数,必须要给予初始化,当初始化的时候就给定了一个常数值的话表示此值是在编译时期就可以知道的,这个最大的好处就是可以进行一些编译时期的运算,减少了运行时期的负担。如果不是给定的一个确定的数据,比如使用random 随机产生的一个数用来进行初始化final修饰的变量则表明此常量不是编译时期知道的!
b:如果此数据是一个引用类型的表明了这个句柄是一个常数不能再指向其他的对象了,但是对象的改变是不受约束的!
②:当修饰的是一个方法时 :
声明一个方法为final 的两个好处是: a :为方法上锁,防止任何的继承类修改此方法类的内容 b: 效率更快(代码1-1有验证)
③:当修饰的是一个类时 :
声明一个类为final的最大好处就是保护此类。这也是为什么api中会声明为final 的原因了!
3:案例测试
4:总结: 由此可见加了final的方法执行效率是要比不加的方法快的,加了的跟正常执行的基本上差不多,不过还是稍有优势。所以当需要的时候是可以进行加的。另外一点当你声明一个方法为private的时候其实默认的已经声明为了final 的。故而可以不加的!
不足之处:欢迎拍砖!