final关键字
2018-06-13 本文已影响9人
erki_stwee
final修饰数据、方法、类
1.final数据
有时候数据的恒定不变是很有用的,它能减轻系统运行时的负担。
final修饰数据可以分为:
1、编译期常量,永远不可改变。
2、运行期初始化时,我们希望它不会被改变。
对于编译期常量,只能使用基本类型,而且必须要在定义时进行初始化。
基本数据类型不可变的是其内容,而引用数据类型不可变的是其引用,引用所指定的对象内容是可变的。
public class TestFinal {
/**
* 编译期常量
*/
private final String final1 = "UartAnd7c";
/**
* 运行期初始化
*/
private final String final2;
private static Random random = new Random();
private final int final3 = random.nextInt(50); //使用随机数来进行初始化
/**
* final指向引用数据类型
*/
public final Person final4 = new Person("songMiaomiao");
public TestFinal(String final2){
this.final2 = final2;
//final1 = "nba";
}
@Override
public String toString() {
return "TestFinal{" +
"final1='" + final1 + '\'' +
", final2='" + final2 + '\'' +
", final3=" + final3 +
", final4=" + final4 +
'}';
}
public static void main(String [] args){
System.out.println("------------第一次创建对象------------");
TestFinal final1 = new TestFinal("cm");
System.out.println(final1);
System.out.println("------------第二次创建对象------------");
TestFinal final2 = new TestFinal("zj");
System.out.println(final2);
System.out.println("------------修改引用对象--------------");
final2.final4.setName("see you again");
System.out.println(final2);
}
}
------------第一次创建对象------------
TestFinal{final1='UartAnd7c', final2='cm', final3=34, final4=Person{name='songMiaomiao'}}
------------第二次创建对象------------
TestFinal{final1='UartAnd7c', final2='zj', final3=29, final4=Person{name='songMiaomiao'}}
------------修改引用对象--------------
TestFinal{final1='UartAnd7c', final2='zj', final3=29, final4=Person{name='see you again'}}
2.final方法
父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。
3.final类
表示最终类,不允许被继承
4.final参数
在匿名内部类中,为了保持参数的一致性,若所在的方法的形参需要被内部类里面使用时,该形参必须为final。
5.final + static
对于成员变量,该变量一旦赋值就不能改变,我们称它为“全局常量”。可以通过类名直接访问。
对于成员方法,则是不可继承和改变。可以通过类名直接访问。