Java final关键字
1 什么是Java的final关键字
Java中的final关键字用于限制用户。Java final关键字可以在许多地方使用:
- 变量
- 方法
- 类
final关键字可以与变量一起应用,该变量没有值,称为空白final或未初始化的final。它只能在构造函数中初始化。空白final也可以是静态的,也只能在静态块中进行初始化。要了解这些内容。首先让我们学习final关键字的基础知识。
2 Java的final变量
如果将任何变量设置为final,则不能更改final变量的值(我们可以把它叫常量)。
2.1 final变量的示例
有一个final的speedlimit变量,我们尝试更改此变量的值,但发现不能更改,因为一旦分配了值的final变量就永远无法更改。
/**
* 一点教程网 - http://www.yiidian.com
*/
class Bike9{
final int speedlimit=90;//final变量
void run(){
speedlimit=400; //这里会编译报错,因为final变量不能修改
}
public static void main(String args[]){
Bike9 obj=new Bike9();
obj.run();
}
}
以上代码编译报错!
3 Java的final方法
如果将任何方法定义成final方法,该方法则不能被覆盖。
3.1 Java的final方法示例
/**
* 一点教程网 - http://www.yiidian.com
*/
class Bike{
final void run(){
System.out.println("跑...");
}
}
class Honda extends Bike{
void run(){ //这个会编译报错,因为final方法不能被覆盖
System.out.println("自行车安全地跑...");
}
public static void main(String args[]){
Honda honda= new Honda();
honda.run();
}
}
以上代码编译报错!
4 Java的final类
如果你将任何一个类定为final,该类将无法被继承。
4.1 Java的final类示例
/**
* 一点教程网 - http://www.yiidian.com
*/
final class Bike{}
class Honda1 extends Bike{ //这里编译报错,因为final类不能被继承
void run(){
System.out.println("自行车安全地跑...");
}
public static void main(String args[]){
Honda1 honda= new Honda1();
honda.run();
}
}
以上代码编译报错!
5 Java的final常见问题
5.1 final方法可以继承吗
可以。final方法是可以继承的,但是你不能覆盖它。例如:
/**
* 一点教程网 - http://www.yiidian.com
*/
class Bike{
final void run(){
System.out.println("跑...");
}
}
class Honda2 extends Bike{
public static void main(String args[]){
new Honda2().run();
}
}
输出结果为:
跑...
5.2 什么是空白final变量
在声明时未初始化的final变量称为空白final变量。
如果要创建一个在创建对象时已初始化的变量,并且一旦初始化就不能更改,空白final变量就很实用!例如,员工工卡ID号,只能在构造函数中初始化。
/**
* 一点教程网 - http://www.yiidian.com
*/
class Emp{
int id;
String name;
final String CARD_ID;
...
}
5.3 静态空白final变量
在声明时未初始化的静态final变量称为静态空白final变量。它只能在静态块中初始化。
/**
* 一点教程网 - http://www.yiidian.com
*/
class A{
static final int data;//静态空白final变量
static{ data=50;}
public static void main(String args[]){
System.out.println(A.data);
}
}
5.4 什么是final参数
如果将任何参数声明为final,则无法更改其值。
/**
* 一点教程网 - http://www.yiidian.com
*/
class Bike11{
int cube(final int n){
n=n+2;//这里编译报错,因为final参数值不能被修改
n*n*n;
}
public static void main(String args[]){
Bike11 b=new Bike11();
b.cube(5);
}
}
以上代码编译报错!
5.5 构造方法可以是final吗
不可以,因为构造方法是不可能被继承的。
热门文章
优秀文章