final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 注意:被final修饰的数据成员在定义时,一定要同时赋初值,不能在程序的其他地方进行修改。否则会出现编译错误。如已有这样的声明“final float PI;”,然后在程序的其他地方有赋值语句PI = 3.12,这是不允许的。   final float PI=3.14f;  (但可以初始化对象的时候再赋初值) public class Test3 { final float PI; //PI空白 //PI=3.14f; Test3( ){PI=3.14f;} public static void main(String args[]) { Test3 t=new Test3( ); System.out.println(t.PI); } }  final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。  一旦给final变量赋初值,值就不能再改变。  final变量定义的时候,可以先声明,而不给初值,这种变量也称为final空白,但是无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。 class Test{ private final String S="final实例变量S"; private final int A=100; public final int B=90; public static final int C=80; //可理解为“全局常量”,一旦给值就不可修改,并且通过类名可以访问。 private static final int D=70; public final int E; //final空白,必须在初始化对象的时候赋初值 public Test(int x){ E=x; } public static void main(String[] args) { Test t=new Test(2); //t.B=91; //出错,final变量的值一旦给定就无法改变 //t.C=81; //出错,final变量的值一旦给定就无法改变 System.out.println(t.S); System.out.println(t.A); System.out.println(t.B); System.out.println(Test3.C); System.out.println(Test3.D); //System.out.println(Test3.E); //出错,因为E为final空白,依据不同对象值有所不同.且E不是静态的,不能用类名直接访问。 System.out.println(t.E); Test t1=new Test(3); System.out.println(t1.E); //final空白变量E依据对象的不同而不同 t1.test1(); } public void test1( ){ final int a; //final空白,在需要的时候才赋值 final int b=4; //局部常量--final用于局部变量的情形 a=3; System.out.println(a); System.out.println(b); } }   4. 程序解析   下面是案例3-4的程序代码。 01 //************************************** 02 //案例:3.4 程序名:SimpleCal.java 03 //功能:简单的计算器,可以进行两个整数的加、减、   乘、除运算 04 //***************************************** 05 06   class SimpleCal{ 07 //operand1和operand2保存两个运算数据 08 private int operand1,operand2; 09 //operator保存运算符 10 private char operator; 11 12 SimpleCal( ){} 13 14 //初始化运算式的构造方法 15 SimpleCal(int operand1,char operator,int operand2){ 16 thi