1.final关键字主要用于修饰类、类成员、方法、以及方法的形参。
2.final关键字的用法:
(1)final关键字修饰一个基本类型的变量(包括局部变量和成员变量)时,该变量不能重新赋值,第一次的值为最终的。
(2)fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。
(3)final关键字修饰一个函数的时候,该函数不能被重写。
(4)final关键字修饰一个类的时候,该类不能被继承。
(5)用public的原因不是必须的,但是常量必须用static和final,即使常量用public把它的权限公开,对外别人仍然不能改变它的数据,而且把权限公开,便于你在任何情况下都可以访问的到这个常量。
3.常量的修饰符一般为:public static final,final和static可以互换位置。
(1)如果不用static,比如π,别人每创建一个对象,内存中就存在着一份3.14,但是这个值是固定的,没有人可以改变它,也就是说一份数据大家用到的都是一样的。共享给大家使用即可。
(2)用public的原因不是必须的,但是常量必须用static和final,即使常量用public把它的权限公开,对外别人仍然不能改变它的数据,而且把权限公开,便于你在任何情况下都可以访问得到这个常量。
public void test1(){
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));//true
System.out.println((e == a));//false
}
@Test
public void test2(){
String a = "hello2";
final String b = getHello();
String c = b + 2;
System.out.println((a == c));//false
//即便是final类型,编译阶段也确定不了值。
}
public static String getHello() {
return "hello";
}
****************************************************************
public class Test {
public static void main(String[] args) {
MyClass myClass1 = new MyClass();
MyClass myClass2 = new MyClass();
System.out.println(myClass1.i);
System.out.println(myClass1.j);
System.out.println(myClass2.i);
System.out.println(myClass2.j);
}
}
class MyClass {
public final double i = Math.random();
public static double j = Math.random();
}
//运行结果,两次打印,j的值都是一样的,j是static类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的。