标签:
概念
final 具有“不可改变的”的含义,可以修饰 非抽象类、非抽象成员方法和变量。
注:
final 不能用来修饰构造方法,因为“方法覆盖”这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖的关系,因此用final修饰构造方法没有任何意义。
父类中用 private 修饰的方法不能被子类的方法所覆盖,因此可以理解为 private 类型的方法默认是 final 类型的。
final 类
把类定义为 final,使这个类不能被继承。具体使用场景如下:
例如:JDK中的java.lang.String 类被定义为 final 类型。
public final class String{...}
final 方法
在某些情况下,出于安全原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为 final 类型。
例如:JDK中的java.lang.Object 类中,getClass()方法为 final 类型,而 equals() 方法不为 final 类型。
所有 Object 的子类都可以覆盖 equals() 方法,但不能覆盖 getClass() 方法。
final 变量
用 final 修饰的变量表示取值不会改变的常量。
例如:JDK中 java.lang.Integer 类中定义了两个常量。
public static final int MIN_VALUE = 0x80000000;
public static final int MAX_VALUE = 0x7fffffff;
final 变量具有以下特征:
1 public class Demo{ 2 public static final int MAX_VALUE = 23; //静态常量 3 public static final int MIN_VALUE = 10; //静态常量 4 private final Date birthday = new Date(); //成员常量 5 }
静态常量一般以大写字母命名,单词之间以“_”符号分开。
1 public class FinalTest { 2 final int a = 1; //成员常量 默认初始化 3 static final int b = 2; //静态常量 默认初始化 4 final int c; //成员常量 5 static final int d; //静态常量 6 7 public FinalTest(){ 8 c = 3; //成员常量 未默认初始化,可在构造函数中初始化 9 } 10 11 static { 12 d = 4; //静态常量 未默认初始化,可在静态代码块中初始化 13 } 14 }
1 public class FinalTest { 2 String str = ""; 3 public void print(){ 4 System.out.println(str); 5 } 6 public static void main(String[] args){ 7 final FinalTest finalTest = new FinalTest(); 8 finalTest.str = "xixihaha"; 9 finalTest.print(); 10 } 11 }
总结:
实际程序中,通过 final 修饰符来定义常量,目的为:
参考:《Java面向对象编程》
标签:
原文地址:http://www.cnblogs.com/JiJie-LianG/p/4695865.html