java关于final关键字的基础知识

时间:2009-08-29 14:29:03

标签: java methods final

最终关键字可以用于方法吗?

8 个答案:

答案 0 :(得分:19)

绝对! final关键字几乎可以应用于任何事物,在每种情况下都意味着“您不再需要对其进行更改”。

这是应用于......时的含义

变量:您根本无法为变量分配新值(当然,将其渲染为常量

方法:您无法在子类中重新实现(即覆盖)此方法

一个类:您无法定义子类

在每种情况下,我们只是简单地指出:一旦声明了这个东西,这就是你将会看到的最后一个值(或实现)。

答案 1 :(得分:3)

是的,可以将方法声明为final。这意味着一个方法不能被其子类覆盖。

来自The Java Language Specifications, Third EditionSection 8.4.3.3

  

可以将方法声明为final   防止子类覆盖或   隐藏它。这是一个编译时错误   试图覆盖或隐藏决赛   方法

有关详细信息,Writing Final Classes and MethodsThe Java Tutorials页面提供了更多信息。

答案 2 :(得分:2)

你可以制作一个方法最终

public class A {
   public static final void f() {
      System.out.println("test");
   }
}

制作方法最终

通常有两个原因
  1. 当一个方法是最终的时,它可以“内联”。
  2. 当方法是最终方法时,该方法无法覆盖。

答案 3 :(得分:1)

当然可以。无法覆盖。

答案 4 :(得分:0)

当然,请查看The Final Word on the Final Keyword

public abstract class AbstractBase
{
    public final void performOperation()    // cannot be overridden
    {
        prepareForOperation();
        doPerformOperation();   
    }

    protected abstract void doPerformOperation();    // must override
}

答案 5 :(得分:0)

子类不能覆盖最终方法。这通常用于防止子类改变类的关键行为。

答案 6 :(得分:0)

作为对其他答案的说明。你可以使用final。在实践中,我很少看到人们使用它,我不知道为什么。

我现在编写的很多代码都是针对多线程环境的,我倾向于使类final成为一个不可变的(如果它是一个值类),这样它就是线程安全的。

将某些方法标记为最终方法(而不是其他方法)的问题在于,您声明该方法存在一些特殊内容,而其他方法则没有什么特别之处。在我的经历中,这很少是人们真正的意思。

如果一个类是为了继承,你需要保持它的清洁并保持它小,以防止不必要的副作用。所有这些取决于您是为自己和您的团队编写代码,还是为更广泛的受众撰写代码 - 即开源项目或商业项目的公共API。

答案 7 :(得分:0)

是的,final关键字可用于方法。它将保持不变性。它可以防止方法被破坏。例如,假设类X的某些方法的实现假定方法M将以某种方式运行。将X或M声明为final将阻止派生类重新定义M,从而导致X行为不正确。