Java中的final关键字

  定义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 stub
		String 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变量的地方,相当于直接访问的这个常量,不需要在运行时   确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值