2014-09-25 39 views
6

任何人都可以告诉我在java中使用主要方法作为final。为什么我们允许在java中拥有最终的主要方法?

,而这是允许在Java

public static final void main(String[] args) { 



} 

我没有看到任何使用使得它最终的。反正它是静态的,所以我们不能重写它。

+0

除非你使用这个'比开始您的应用程序之外的任何main'方法,但绝对没有理由使之'final'。 – 2014-09-25 15:54:39

回答

10

final添加到静态方法实际上可以有所作为。请看下面的代码:

class A { 
    public static void main(String[] args) { 
     System.out.println("A"); 
    } 
} 

class B extends A { 
    public static void main(String[] args) { 
     System.out.println("B"); 
    } 
} 

class C extends B { 
} 

public class Test { 
    public static void main(String[] args) { 
     C.main(args); // Will invoke B.main 
    } 
} 

添加finalA.main将防止意外A.main隐藏。换句话说,将final添加到A.main可确保B.main不被允许,因此C.main将打印"A"而不是例如"B"

为什么我们允许在java中有最终的主要方法?

除了上述极端状况,增加final静态方法并没有太大的区别,所以我没有看到一个大点的添加规则不允许它。

的更多信息请访问:Behaviour of final static method

+3

'final'将会阻止隐藏'static'方法。 – 2014-09-25 15:53:41

+0

我尝试在A的主要方法中添加final,该类现在在类B中有编译错误 - **不能从A **覆盖最终的方法。我正在使用Java 1.7。这个答案是否有效? – gyan 2015-09-04 14:59:35

+0

@gyan,我不跟着你。你认为哪部分是无效的? – aioobe 2015-09-04 21:44:19

相关问题