2014-09-25 68 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

相關問題