java中final关键字介绍

原创 2012年03月26日 15:04:31

Final关键字  

 1final成员

  final数据

     当在类中定义变量时,在前面加上final关键字,那边是说,这个变量一旦初始化便不可改变,这里的不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变,但引用变量所指向的对象中的内容还是可以改变的。例如:

例如,对于如下语句:

 final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:

a=new StringBuffer("");
但是,执行如下语句则可以通过编译:

a.append(" broken!"); 

   final参数

有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

例如

 

public void method(final  int  i)

{
      retrun i+1;
} 

public void method(final  StringBuffer  param)
{
      param.append("a");
} 


  

 final空白

         java允许“生成空白final”,所为空白final是指被被声明为final但有未给定初值的域。

  其初始化可以在两个地方,一是其定义处,也就是在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一。

  例如:

    

package mstest;
class Poppet {
private int i;
public Poppet(int ii) { i = ii; }

}

public class BlankFinal {

  private final int i = 0;  //定义时初始化
  private final int j;      //空白final
  private final Poppet p;   //空白final引用
  
//空白finals必须在构造器中初始化
  public BlankFinal() {
       j = 1;
       p = new Poppet(1);
    }

  public BlankFinal(int x) {
       j = x;
       p = new Poppet(x);
    }

  public static void main(String[] args) {

       new BlankFinal();
       new BlankFinal(23);

    }
}       

 

3final方法

      使用final方法有两个原因:第一,(主要是正对继承来说的)把方法锁住,防止任何继承类修改它的含义,即说明该方法提供的功能已经满足你的要求,不需要进行扩展,并且不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也即是说可以直接使用。第二,效率。在java早期实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的所用调用都转为内嵌调用。也即所说的inline机制,他会是你在调用final方法时,直接将方法的主题插入到调用处,而不是进行例行的方法调用,例如存断点,压栈等,这样可能会使你的程序效率有所提高,然而,当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以要慎用final进行方法定义。

  注意:类中所有的private方法都隐式地指定为final的。由于无法取用private方法,所以也就无法覆盖它。可以对private方法添加final’修饰词,但这并不能给该方法增加任何额外的意义。

 

3final

      将某个类整体定义为final是,就表明该类无法被继承,换句话说,处于某种考虑,你对该类的设计用不需要做任何改动,或者处于安全考虑,你不希望他有子类。这样,final类中所有的方法都隐式指定为final的,因为无法覆盖他们。

Java final static abstract关键字介绍

Java final static abstract关键字介绍   一,抽象类:abstract      1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类;  ...
  • wmc_bk
  • wmc_bk
  • 2017年02月27日 15:08
  • 135

Java final static abstract interface关键字介绍

1.final:    1)可用于修饰:成员变量,非抽象类(不能与abstract同时出现),非抽象的成员方法,以及方法参数     2)final方法:不能被子类的方法重写,但可以被继承; ...

Java final关键字

  • 2017年05月13日 23:57
  • 4KB
  • 下载

Java中的final关键字

  • 2016年06月07日 12:22
  • 3KB
  • 下载

JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包

JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包 没有到不了的明天。 嬉皮笑脸面对人生的难。 相信自己,不然你什么都做不了...
  • m366917
  • m366917
  • 2016年08月03日 21:04
  • 1767

java final关键字

  • 2011年12月18日 11:45
  • 34KB
  • 下载

Java关键字final、static使用总结

  • 2011年11月19日 11:32
  • 11KB
  • 下载

Java关键字final、static使用总结

原文链接http://lavasoft.blog.51cto.com/62575/18771/ 一、final         根据程序上下文环境,Java关键字final有“这是无法改变...

Java关键字final、static使用总结

Java关键字final、static使用总结   一、final         根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象...

java方法的重载,重写,super,this,final关键字

一.重载 重载(Overloading): (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。 重载Overloading是一个类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中final关键字介绍
举报原因:
原因补充:

(最多只允许输入30个字)