final类型的数据(基本类型和引用类型)分为编译是确定值,和运行时确定值两类。都要保证在使用前进行初始化,注意final类型的数据若在定义时没有显示初始化,是没有默认初值的。对于在定义时没有显式初始化的,应该在构造方法中进行初始化,这时可以利用不同参数传递给它,使得它可以根据具体对象的不同而不同,并且保证在不同的对象中始终唯一。
//FinalDataInitial.java
//Fianl data in the constructor
package com.msn.spaces.bryantd001;
public class FinalDataInitial{
//编译时初始化
private final int finalInt=10;
private final float finalFloat=returnFloatValue();
//运行时初始化
private final double finalDouble;
private final String finalStr;
public FinalDataInitial(){
System.out.println("Final data are initialized in the constructor without arguments");
finalDouble=20;
finalStr="I am a final string initialized in the constructor without argument";
System.out.println(this);
}
public FinalDataInitial(double finalDouble, String finalStr){
System.out.println("Final data are initialized in the constructor with arguments");
this.finalDouble=finalDouble;
this.finalStr=finalStr;
System.out.println(this);
}
public float returnFloatValue(){
return 1.0f;
}
public String toString(){
return "finalInt = "+finalInt+"/n"
+"finalFloat = "+finalFloat+"/n"
+"finalDouble = "+finalDouble+"/n"
+"finalStr = "+finalStr;
}
public static void main(String[] args){
FinalDataInitial fdiObj=new FinalDataInitial();
System.out.println();
FinalDataInitial fdiObj2=new FinalDataInitial(5.0d, new String("I am a final string initialized in the onstructor with argument"));
}
}