Java中的final关键字

来源:互联网 发布:淘宝断码地带是正品吗 编辑:程序博客网 时间:2024/06/05 23:39
  定义final的作用:

      1. final类不能被继承,没有子类,final类中的方法默认是final的。

      2. final方法不能被子类的方法覆盖,但可以被继承。
      3.final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

  final的好处:

      1.final方法可以告诉编译器对于final方法的调用不需要动态的绑定,这会让代码变得略微更有效一点,静态方法的绑定     总是比动态方法的绑定更加高效,因为在动态方法的绑定中,运行时需要解析方法的调用
      2.能够带来更高的效率。将方法标记为final可以让编译器将所有final方法的调用转变为内联调用,当编译器看到final     方法调用时,根据自己判断略去通过方法调用机制插入代码的步骤,调用机制包括将方法参数压栈,清除参数和最后处理返     回值。
      与这套方法不同,编译器可以在方法体中使用实际的代码替换方法调用。如果方法过大,在方法调用和方法返回方面的时     间节省将会变得很小,这取决与方法内部花去的时间总量。
      一般来说,短小的方法能够从内联中获益。内联的好处不局限于方法的大小,还会带来进一步的优化,如减少无用的代码     和更多的内联。
   
     注:
       由于private和static方法不能在子类中被重写,因此他们总是隐式的final
       Java不允许显式地标记方法为内联方法,编译器会根据自己的判断,在代码中将方法标记为final。
  

   final关键字要点:

    

public class Student(){public final int ID;public Student(){ID=createID();}public int createID(){return ..   //generate new ID}}


   1.空缺final变量是一种声明为final但未初始化的变量,空缺final必须在构造函数中初始化,空缺final变量只在对象生命周     期中调用一次.

   2.空缺final如果在某个构造函数中初始化, 就必须在类的所有重载构造函数中进行初始化,final变量不能指向除初始化时     设置的对象之外的任何对象,如果final变量保存指向对象的引用,那么引用必须保持不变,而非对象。可以通过调用赋值方     法来改变对象的状态


    
public class MyClass {public static void main(String[] args) {// TODO Auto-generated method stubString a = "hello2"; final String b = "hello";String d = "hello";String c = b + 2; String e = d + 2;System.out.println((a == c));System.out.println((a == e));}public static String getHello() {return "hello2";}}

   这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切   值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时   确定。
原创粉丝点击