Java教程-详解Java final 关键字

在Java中,final
关键字用于对用户进行限制。它可以在许多上下文中使用。
final
关键字可以与变量一起使用,没有初始值的final
变量被称为"blank final variable"或"uninitialized final variable"。它只能在构造函数中初始化。空白的final
变量也可以是静态的,它只能在静态块中初始化。我们将在接下来详细学习这些概念。让我们首先了解final
关键字的基础知识。
1)Java中的final变量
当将任何变量设置为final
时,该变量的值不能被更改(它成为常量)。
final变量的示例
假设有一个final
变量speedLimit
,我们尝试更改该变量的值,但是由于它被声明为final
,所以无法更改。final
变量一旦赋值就永远不能改变。
class Bike9{
final int speedlimit=90;//final 变量
void run(){
speedlimit=400;
}
public static void main(String args[]){
Bike9 obj=new Bike9();
obj.run();
}
}
输出:
Compile Time Error
2)Java最终方法
如果您将任何方法设为最终方法,则无法覆盖它。
最终方法的例子
class Bike{
final void run(){System.out.println("运行");}
}
class Honda extends Bike{
void run(){System.out.println("以 100kmph 安全运行");}
public static void main(String args[]){
Honda honda= new Honda();
honda.run();
}
}
输出:
Compile Time Error
3)Java最终类
如果您将任何课程设置为最终课程,则无法扩展它。
最后一堂课的例子
final class Bike{}
class Honda1 extends Bike{
void run(){System.out.println("以 100kmph 安全运行");}
public static void main(String args[]){
Honda1 honda= new Honda1();
honda.run();
}
}
输出:
Compile Time Error
Q) final 方法是否被继承?
Ans) 是的,final 方法是继承的,但你不能覆盖它。例如:
class Bike{
final void run(){System.out.println("running...");}
}
class Honda2 extends Bike{
public static void main(String args[]){
new Honda2().run();
}
}
输出:
running...
Q) 什么是空白或未初始化的最终变量?
在声明时未初始化的最终变量被称为"空白最终变量"。
空白最终变量在创建对象时进行初始化,并且一旦初始化后就不能更改。这在某些情况下非常有用,例如员工的 PAN 卡号。
空白最终变量只能在构造函数中进行初始化。这意味着每次创建对象时,空白最终变量都会被赋予初始值,之后无法再进行修改。
空白最终变量的示例
class Student{
int id;
String name;
final String PAN_CARD_NUMBER;
...
}
Que)我们可以初始化空白的最终变量吗?
是的,但仅限于构造函数。例如:
class Bike10{
final int speedlimit;//空的 final 变量
Bike10(){
speedlimit=70;
System.out.println(speedlimit);
}
public static void main(String args[]){
new Bike10();
}
}
输出:
70
静态空白最终变量
在声明时未初始化的静态最终变量称为静态空白最终变量。它只能在静态块中初始化。
静态空白最终变量的示例
class A{
static final int data;//空的静态 final 变量
static{ data=50;}
public static void main(String args[]){
System.out.println(A.data);
}
}
Q) 什么是最终参数?
如果将任何参数声明为 final,则不能更改它的值。
class Bike11{
int cube(final int n){
n=n+2;// 不能改变,因为 n 是 final 变量
n*n*n;
}
public static void main(String args[]){
Bike11 b=new Bike11();
b.cube(5);
}
}
输出:
Compile Time Error
Q) 我们可以声明一个构造函数为 final 吗?
不,因为永远不会继承构造函数。