在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。
1.修饰类
当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,final类中的所有成员方法都会被隐式地指定为final方法。
2.修饰方法
final修饰的方法,方法不能被重写(可以重载多个final修饰的方法)。当父类中final修饰的方法同时访问控制权限为private,子类中不能直接继承到此方法,此时子类中定义相同的方法名和参数,为子类中重新定义了新的方法。
3.修饰变量
1) final修饰变量表示常量,只能被赋值一次,赋值后值不再改变。如果final修饰一个引用类型时,值指的是地址的值,内容是可变的。
public class Test06 { public static void main(String[] args){ Test06 test = new Test06(); final StringBuilder str = new StringBuilder("hello"); str.append("World"); System.out.println(str); } }
输出结果为helloWorld。
2)当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。
编译期间能知道它的确切值:
public class Test06 { public static void main(String[] args) { String a = "helloworld"; final String b = "hello"; String d = "hello"; String c = b + "world"; String e = d + "world"; System.out.println((a == c)); System.out.println((a == e)); } }
输出结果为true,false;编译器将其当成常量,a,c都指常量池中的"helloworld"。
编译期间不知道它的确切值:
public class Test06 { public static void main(String[] args) { String a = "helloworld"; final String b = getWord(); String d = "hello"; String c = b + "world"; String e = d + "world"; System.out.println((a == c)); System.out.println((a == e)); } public static String getWord() { return "hello"; } }
输出结果为false,false。