Java修饰符final总结

final 的意思是最终的,不可改变的。

final可以用来修饰

    a.类、

    b.方法(包括类方法和对象方法)、

    c.变量(包括成员变量、局部变量)。

1. final修饰类:

用final修饰的类不能被继承,不能拥有自己的子类。

如果对一个已经用final修饰的类进行继承,在编译时会发生错误。 

2. final修饰方法:

final修饰的方法不能被重写(可以重载多个final修饰的方法)。

注意:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,

将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是

在子类中重新定义了新的方法。例如:

3. final 修饰变量:

一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

这里需要注意以下几个问题:

1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行--显示初始化--(即为其显示指定初始值)。

对于final修饰的形参,由于是实参传递过来的,很好理解。

对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。

对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。

但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:

final修饰的类属性和变量属性必须要进行显示初始化赋值。

另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用

数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。

 本文参考https://www.cnblogs.com/lwbqqyumidi/p/3513047.html

猜你喜欢

转载自www.cnblogs.com/dz77/p/9402732.html