💖 简介
java中final关键字应用广泛,使用频繁,我结合C++进行整理,归纳,方便理解和掌握,特记录如下。
如有理解不对的地方,欢迎各位指出,大家共同交流和学习。 如有帮助,请点赞加支持! 送人玫瑰手有余香!🌹🌹🌹
💖 修饰变量
final修饰的变量,成为常量,常量的值不能被修改,只能定义一次。类似于C/C++中的const。
🏆 局部变量
final修饰的局部变量必须声明进行初始化,如果不初始化,虽然声明时不报错,但是使用时就会报错。
final int a; //只声明,未赋值
System.out.println(a);//报错
final int a=10;
a=20; //报错 Cannot assign a value to final variable 'a'
C++中有同样的用法,但是,关键字使用const:
const int len = 10;
len = 20; //报错 表达式必须是可修改的左值
🏆 成员变量
final 修饰的类中的成员变量,对象创建时必须初始化该成员,即声明的时候初始化或构造函数进行初始化,该类对象被构建以后,这个值不能被修改,即没有setName方法。
public class MyPerson {
private final int age;
public MyPerson(int age) {
this.age = age;
}
public int getAge() {
return age;
}
//该setName方法,会报错
public void setAge(int age)
{
this.age=age;//报错
}
}
C++中有同样的用法,但是,关键字使用const:
class Person
{
private:
const int age;
};
🏆 修饰形参
final修饰形参时,该形参在函数内不能被修改。
public void fun(final int a)
{
System.out.println(a); //正确 可以被访问
a=20; //错误 不可以被修改
}
C++中有同样的用法,但是,关键字使用const:
void fun(const int a)
{
a = 10; //报错
}
💖 修饰方法
该方法不能被重写,类的private方法会被隐式的指定为final方法。
public class MyPerson {
private final int age;
public final void printValue()
{
System.out.println(age); //正确 可以被访问
}
}
C++11中也使用final关键字来修饰虚函数,表示该虚函数不能被重写。但是,final关键字放在函数的后面,如下
class MyPerson
{
public:
virtual void printValue() final; //正确
void printKey() final; //错误,只能修饰虚函数
}
💖 修饰类
该类不能被继承,一般用于将工具类设计成final类。如java中的String类:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
C++11中也使用final关键字来修饰类,表示该类不能被继承。但是,final关键字放在函数的后面,如下
class Person final
{
}
💖 好处
final关键字可以提升性能。
💖 注意
💚 不能修饰抽象类。因为,抽象类继承才有意义。
💚 不能修饰构造器。因为,构造器不能被继承,也不能被重写。