当前位置:   article > 正文

Java中的final修饰符用法大全

final修饰符

一,final修饰类
fianl修饰符如果修饰类的话就代表该类不可以被继承,即不允许被继承;

public final class NoExtends{}
  • 1

如此,NoExtends类就不可以被继承了,即下面的代码就会报错

public calss ExtendsTest extends NoExtends{} //这是不可以的
  • 1

由于NoExtends类有了final的修饰而无法被调用。类似的比如Java中的String类也是final修饰的,也即String类不允许被继承不允许扩展其方法或属性。

二,final修饰成员变量
final修饰成员变量之后就意味着该成员变量不能够被修改,由于外界无法修改该成员变量的值,故而其创建时就需要被赋值或者在其构造方法处赋值。如果final变量没有被赋值则会报错,且只能赋值一次。

private final int FinalPara = 5;
  • 1

三,final修饰静态变量

private final static double Final_Para_Static = 6.6;
// TODO 或者也可以在static代码块儿内赋值
//static{
// Final_Para_Static = 6.6;
//}
  • 1
  • 2
  • 3
  • 4
  • 5

对于控制可见性的修饰符诸如private,protected,public都是在类,属性,方法最前的位置,而在用final时是在这些修饰符之后的第二个位置。

四,final不能用来修饰构造方法
构造方法的名字与类的名字是一样的,构造方法与别的方法不一样,其不存在覆盖的可能,且子类也没有去覆盖构造方法的诉求。

五,final用来修饰方法
修饰方法之后该方法无法被子类覆盖

public final void describe(){
System.out.println("这是一个final修饰的方法哦~不能被覆盖");
}
  • 1
  • 2
  • 3

那么上述在父类中的行为方法就无法在子类中覆盖了,尽管它是public,尽管子类继承了父类。
比如下面的子类中的代码就会报错

public void describe(){
System.out.println("子类覆盖了父类的方法吗?");
super.describe();
}
  • 1
  • 2
  • 3
  • 4

六,final修饰形式参数
如果用final修饰了形式参数,那么形式参数在被实际参数赋值之后,就不能再被赋值了

private double buy(final int count){}
  • 1

七,final修饰局部变量
final也可以修饰局部变量,当然也是必须赋值且只能赋值一次

八,final修饰引用
这是个重头戏:引用被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。
即虽然我们的这个应用不能再指向其它的对象了,但是该引用指向的这个对象的内容仍然是可以被修改的。比如下面的代码,

public void describe(){
System.out.println(setname);
}
  • 1
  • 2
  • 3
FinalObj.describe();
FinalObj.setName("变化该对象的名字");
FinalObj.describe();
  • 1
  • 2
  • 3

这样的话describe方法中对于setname的描述还是会变化的。

九,final修饰数组
其实final对于数组的修饰跟final对于引用的修饰是有点儿类似的,对于被final修饰的数组而言,不能让这个数组指向别的数组,但是是可以修改这个数组中的元素的值的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/574407
推荐阅读
相关标签
  

闽ICP备14008679号