文章目录
1 final 关键字的用法是什么?
- final关键字可以用于修饰类、类属性和类方法。
– 对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错:
– final 修饰的类方法不能被覆盖(重写)
– final 修饰的类不能被子类继承。
2 什么是空白final变量
空白final 变量在声明期间不会初始化。
3 可以在不初始化的情况下声明最终变量吗?
可以,可以在不初始化的情况下声明最终变量,这些最终变量称为空白最终变量,但必须在使用前进行初始化。
初始化块
实例初始化块用于初始化实例数据成员,每次创建类的对象时,该块都会运行。 实例初始化块恰好在构造函数中的代码之前执行。 我们可以使用IIB初始化实例最终变量
package TestFinalKeyWord;
/**
* @author
* @create 2020-12-17 11:09
**/
public class Test {
// Blank final variable
final int SPEED;
// Instance Initialization Block
{
SPEED = 5;
}
public static void main(String args[])
{
Test t=new Test();
System.out.println("Travelling Speed is :"+t.SPEED);
}
}
static 静态初始化块
静态块是Java类内部的代码块,将在类首次加载到JVM中时执行。 静态初始化块可用于初始化类最终变量/静态最终变量
package TestFinalKeyWord;
/**
* @author
* @create 2020-12-17 11:09
**/
public class Test {
// Blank final variable
static final int SPEED;
// Static Initialization Block
static
{
SPEED = 10;
}
public static void main(String args[])
{
System.out.println("Travelling Speed is :" + SPEED);
}
}
通过构造器
构造函数还可用于初始化空白的最终变量。
public class Test
{
// Blank final variable
final int SPEED;
// No Parameter Constructor
Test()
{
SPEED = 15;
}
public static void main(String args[])
{
Test t=new Test();
System.out.println("Travelling Speed is :"+t.SPEED);
}
}
4.方法内
局部最终变量可以在声明期间或声明之后的任何地方初始化。 使用前必须先初始化。
public class Test
{
public static void main(String args[])
{
// Local final variable
final int SPEED;
SPEED = 25;
System.out.println("Travelling Speed is :" + SPEED);
}
}
4 什么是final 方法
当一个方法被声明为final方法时,它被称为final方法。子类可以调用父类的final方法,但不能覆盖它(重写)。
5 什么是 final 类
用final关键字声明的类称为final类,不能将final类作为子类。 这意味着最终类不能被任何类继承。
6 可以将构造器声明为 final 吗?
不可以,构造函数不能声明为final。 构造函数不会被继承,因此不能被覆盖,因此拥有最终的构造函数是没有用的。
7 如果final 修饰List/ArrayList
一旦创建了最终List / ArrayList,我们就可以从列表中添加或删除数据,但是不能为最终列表分配值。
import java.util.ArrayList;
import java.util.List;
public class FinalList
{
public static void main(String[] args)
{
final List myList = new ArrayList();
myList.add("one");
myList.add("two");
myList.add("three");
System.out.println(myList);
List tmp = new ArrayList();
tmp.add("four");
myList = tmp; // Throws Compilation error
myList = null;
}
}
当我们将tmp或null分配给myList时,将出现编译错误,例如“无法分配最终的局部变量myList”
8java中什么是final static 变量
将变量声明为静态最终变量后,该变量将变为常量。 仅存在一个变量副本,该副本不能被任何实例更改。