fianl翻译为“最终”的意思。
在java语言中,final是一个关键字,可以被用来修饰类、变量以及成员方法。
被final修饰的变量又被叫为“自定义常量”。
一、final修饰类
当不希望类被继承时,可以用final修饰。
被final关键字修饰的一个类被称为最终类,即该类不能被继承,但是该类可以有父类。
class Animal{
}
final class Cat extends Aniaml{
}
二、、被final修饰的类虽然不能被继承,但可以实例化对象
Public class C{
public static void main(String[]args){
D d=new D();
}
}
final class D{
}
三、final修饰变量
变量又可分为成员变量和局部变量。
1、final修饰成员变量:该成员变量必须在其所在类对象创建之前被初始化,并且只能被初始化一次。
赋值位置:
(1)定义时,如
final int a=10;
(2)在构造器中
class A{
final int a;
public A(){
a=10;
}
}
(3)在代码块中
class A{
final int a;
final int b;
public A(){
a=10;
}
{
b=7;
}
}
即被final修饰的成员变量一定要被赋值且只能被赋值一次,且必须是在这个成员变量所在类对象创建之前被赋值。
若修饰的变量带有static,则只能在定义时或在静态代码块中赋值,不能在构造器中赋值。
2、final修饰局部变量:该变量在使用之前赋值,且只能被赋值一次!
说明:final修饰局部变量,在定义变量时可以不被直接初始化,但是在使用该变量之前,该变量必须完成初始化,否则会报错。
注意:
被final修饰的变量,又被称为自定义常量,在java中,常量即不会被改变的量。
所以,被final修饰的变量是不能被改变的,只能赋值一次,后续不可更改。
在java中分基本数据类型和引用数据类型。
当final修饰基本数据类型的变量,则意味着这个变量只能被赋值一次
final int a=10;
a=9;//报错
当final修饰引用数据类型时的变量,则引用变量·所指向的对象(存放该变量的地址)不能更改,但对象的内容可以更改。
final int []b={1,2,3};
//a=null;---->报错
a[1]=4;//编译通过
四、final修饰成员方法
当final关键字修饰成员方法,则此方法不可被重写,但可以被继承。
class A{
public final void add(){
}
}
class B extends A{
public void add(){}//报错:被final修饰的成员方法不可被重写
}
(注意:final不能修饰构造方法。)
五、当一个类已经被final修饰了,那么该类里面的方法没必要再写final了。
final修饰的类已经不能被继承,则该类里面的方法自然也不能被继承了。
六、包装类:Integer、Boolean、Double、Float等都是final类,String也是final类。