标签:相同 直接 can code variable 就会 value png mamicode
Java语言中的final关键字,想必大家都不是很陌生,我们自己用的最多的应该是用来定义常量吧,那么今天我们就来了解final这个关键字的用法,这个关键字还是非常简单的。
final从字面意思是不可更改的,最终的意思,它可以用来修饰类、方法、变量(包括成员变量和局部变量)、参数。
final修饰类,表示该类不能再被继承了,如果一个类它的功能比较完整,不需要扩展功能,我们就可以使用final来修饰。我们最常用String、Integer、System等类就是用final修饰的,其不能再被其他类所继承。
用final修饰类如果被继承了那么在编译的时候就会报错。
final修饰方法,表示这个方法不能被子类方法重写。如果你认为一个方法的功能已经足够完整了,不需要再去子类中扩展的话,我们可以声明此方法为final。比如Object类中getClass()方法就是final修饰的。
注意:
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。
注意:若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。
final修饰变量表示是常量,一般都和static一起使用,用来定义全局常量。final无论修饰的是成员变量还是局部变量,都必须进行显式初始化,如下。
1 public class FinalTest { 2 //显式初始化 3 final int AA=11; 4 final int BB; 5 final int CC; 6 final int DD; 7 //构造代码块初始化 8 { 9 BB=22; 10 } 11 //构造方法初始化 12 public FinalTest(){ 13 CC=33; 14 DD=44; 15 } 16 17 public FinalTest(int CC, int DD) { 18 this.CC = CC; 19 this.DD = DD; 20 } 21 }
我们可以通过显式初始化、构造代码块初始化、构造方法初始化这三种方式对final修饰的变量进行初始化。
前面都是讲的final修饰基本数据类型的变量,如果final修饰引用变量会是怎么样,我们来看一下举例:
1 public class FinalTest { 2 3 public static void main(String[] args) { 4 final AA aa = new AA(); 5 //这里在引用其他的对象就会报错Cannot assign a value to final variable ‘aa‘ 6 //aa=new AA(); 7 aa.i++; 8 System.out.println(aa.i); 9 } 10 11 } 12 13 class AA{ 14 int i; 15 } 16 17 //运行结果:1
可以看到,虽然我们将引用变量用final修饰了,但是该对象的变量 i 我们还是可以进行修改,而这个变量的引用不能再指向另一个对象了。表明final修饰的是引用变量,就不能再指向其他对象,但是如果该对象内的变量不是final修饰的,其变量的值是可以进行修改的。
final修饰参数准确的来说应该是修饰形参,表明该形参的值不能被修改。
1 public class FinalTest { 2 3 public static void main(String[] args) { 4 FinalTest f=new FinalTest(); 5 f.show(5); 6 } 7 8 public void show(final int param){ 9 //编译报错:Cannot assign a value to final variable ‘param‘ 10 //param=10; 11 System.out.println(param); 12 } 13 }
我在使用final修饰形参时,表明此形参是一个常量。当我们调用方法的时候,给形参进行赋值,一旦赋值以后,就只能在该方法使用,而且不能进行重新赋值操作,否则编译报错。如果形参是引用类型,则引用变量不能再指向其他对象,但是该对象的内容是可以改变的。
标签:相同 直接 can code variable 就会 value png mamicode
原文地址:https://www.cnblogs.com/tang-hao-/p/11241293.html