java中的final关键字所起的作用解析

java中的final关键字所起的作用解析,第1张

  一、关键字final的理解   1、final数据

  在java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量。对于这种情况,编译器可以将此常量值带入需要用到它的计算式子当中,这种在编译时执行计算式的方法减轻了运行时的开销。通常,这类常量数据都是基本类型的数据,并赋予关键字final,同时在对此常量定义时需要进行赋值。

  值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。一旦引用被初始化为指向一个对象时,它也就无法再指向另外一个对象,然而该对象本身是可以被修改的。通常,对于一个既是staTIc又是final的域只占一段不能改变的存储空间。

  下面的例子验证了final数据的含义。

  class Hank

  {

  int i;

  public Hank(int i){this.i=i;}

  }

  public class FinalTest

  {

  private String s;

  public FinalTest(String s){this.s=s;}

  private final int value=20;

  private staTIc final int INT_1=50;

  public staTIc final int INT_2=60;

  staTIc final int INT_3=70;

  private final Hank h1=new Hank(1);

  private static final Hank h2=new Hank(2);

  private Hank h3=new Hank(3);

  private final int[] a={1,2,3,4,5};

  public String toString()

  {

  return s+“: ”+“INT_2= ”+INT_2;

  }

  public static void main(String[] args)

  {

  FinalTest ft1=new FinalTest(“ft1”);

  //ft1.value++;常量值不能被修改

  ft1.h1.i++;//对象引用不能改变,但是其对象本身是可以修改的

  ft1.h3=new Hank(2);

  //ft1.h1=new Hank(1);常量对象引用不能再指向另一个对象引用

  for(int i=0;i《ft1.a.length;i++)

  {

  ft1.a[i]++; //对象引用不能改变,但是其对象本身是可以修改的

  System.out.println(ft1.a[i]);

  }

  //ft1.a=new int[3]; 常量对象引用不能再指向另一个对象引用

  }

  }

  2、空白final

  被声明为final但又没有给定初值的域即为空白final,编译器确保使用前必须初始化空白final。比如:

  class Blank

  {

  private int i;

  Blank(int i){this.i=i;System.out.println(“Blank.i=”+this.i);}

  }

  public class BlankFinal

  {

  private final int i;//blank final

  private final Blank b;//blank final reference

  BlankFinal()

  {

  i=1;b=new Blank(1);//使用前必须初始化

  System.out.println(“BlankFinal.i=”+this.i);

  }

  BlankFinal(int i)

  {

  this.i=i;b=new Blank(i); //使用前必须初始化

  System.out.println(“BlankFinal.i=”+this.i);

  }

  public static void main(String[] args)

  {

  new BlankFinal();//Blank.i=1;BlankFinal.i=1;

  new BlankFinal(2); //Blank.i=2;BlankFinal.i=2;

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存