笔记:java中final关键字实例代码

笔记:java中final关键字实例代码

Final 通常是指无法改变的的,比如数据、方法和类,出于不想改变的原因一般式因为设计或者是效率,通过Final可以告诉编译器一个永不改变的编译时常量或者是一个在运行时初始化而不希望改变的值。一个既是Static又是Final的域只占据一段不可改变的空间。
    被Final修饰的域的值并不是不可改变的,在Final修饰引用时,Final的作用是使这个引用不能指向一个新的对象而并不约束它的值。

Final域

package cn.hidehai.section7;

import java.util.Random;

import static org.nsir.util.tools.Print.*;

/**
 * @author HideHai
 *
 */
class Value{
 int i;
 public Value(int i){
  this.i = i;
 }
}

public class FinalData {
 
 private static Random rand = new Random(47);
 private String id;
 public FinalData(String id){
  this.id = id;
 }
 private final int valueOne = 9;
 private static final int VALUE_TWO = 99;
 public static final int VALUE_THREE = 39;
 private final int i4 = rand.nextInt(20);
 static final int INT_5 = rand.nextInt(20);
 
 private Value v1 = new Value(11);
 private final Value v2 = new Value(22);
 private static Value VAL_3 = new Value(33);
 
 private final int[] a= {1,2,3,4,5,6};
 
 public String toString(){
  return id+”:”+”i4=”+i4+”,INT 5=”+INT_5;
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  FinalData fd1 = new FinalData(“fd1”);
  fd1.v2.i++;
  fd1.v1 = new Value(9);
  for(int i=0;i < fd1.a.length;i++){
   fd1.a[i]++;
   print(fd1);
   print(“Creatint new FinalData”);
   FinalData fd2 = new FinalData(“fd2”);
   print(fd1);
   print(fd2);
  }

 }

}

空白的Final:必须在域的定义处或者是每个构造器中对Final进行赋值,使其在使用前被初始化。

package cn.hidehai.section7;

import static org.nsir.util.tools.Print.*;

/**
 * @author HideHai
 *
 */
class Poppet{
 private int i;
 Poppet(int ii){
  this.i = i;
 }
}
public class BlankFianl {
 private final int i = 0;
 private final int j;
 private final Poppet p;
 public BlankFianl(){
  j = 1;
  p = new Poppet(1);
 }
 public BlankFianl(int x){
  j = x;
  p = new Poppet(x);
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new BlankFianl();
  new BlankFianl(47);
 }

}

使用Final修饰传入的参数,在方法中无法修改此参数所指向的引用

import static org.nsir.util.tools.Print.*;

/**
 * @author nsir
 *
 */
class Gizmo{
 public void spin(){
  print(“Gizmo”);
 }
}
public class FinalArguments {
 void with(final Gizmo g){
  //g = new Gizmo(); 终态引用
 }
 void without(Gizmo g){
  g = new Gizmo();
  g.spin();
 }
 int g(final int i){
  return i+1;
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  FinalArguments bf = new FinalArguments();
  bf.without(null);
  bf.with(null);

 }

}

留下回复