2013-02-26 49 views
2

鑑於命名爲TestMainFunction.java簡而言之,主要功能特性 - 多類在一個源文件

1)Java源文件作爲我們大多數人都知道,一個Java文件名必須是類名其中包含主要功能

請參閱下面的簡單代碼(在上述命名的單個文件中),該代碼完美執行並打印ClassOne

public class TestMainFunction {} 

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

2.)當一個文件中有多個具有主函數的類時,Eclipse會提示用戶選擇要運行的類。

請參閱下面的簡單代碼(單個文件如上所述命名),該代碼可以完美執行並按照我們從Eclipse Promt中選擇的那樣打印類名。

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

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

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

以上所有都將按照我提到的方式工作。 它將爲每個類創建單獨的.class文件。即使在使用內部類時也適用相同的行爲。

但是到底發生了什麼?當一個源文件中存在多個類時,Eclipse如何知道要啓動哪個類?任何人都可以解釋它嗎?解釋這將不勝感激。

+2

它知道它,因爲,如你所說,它會提示用戶選擇要運行的一個。 – 2013-02-26 12:23:45

回答

5

正如你們大多數人都知道,一個Java文件名必須是類名 其中包含的主要功能

這是不正確的,我相信你的困惑的根源。 Java源文件只允許有一個公共類,並且它必須具有與包含文件相同的名稱(減去擴展名),因此它必須具有必須。儘管給定的Java源文件可能包含儘可能多的非公共類文件,唯一的約束是their names are valid。請注意,您可以擁有與其包含的源文件(不包括擴展名)相同的名稱,該名稱不是公開的!另請注意,在單個Java源文件中有多個頂級(非嵌套)類通常被認爲是不好的做法。

您可能有的第二個假設是隻允許源文件中的一個類具有主函數。這簡直是​​不真實的。您可以爲每個類文件添加一個主函數 - 唯一重要的是您在啓動應用程序時指定給JVM的那個函數。

因此,考慮你的情況 - 有多個類文件的源文件(其中公共之一),每個類都有一個main方法,適用:

  • 當你在Eclipse中調用運行命令上這個文件,Eclipse會檢測到有多個符合條件的類可以運行,並會提示您選擇其中一個類。然後,它將爲選定的課程創建一個「運行資料」,該課程將啓動,該課程只有。您可以通過Run-> Debug Configurations菜單實際查看Eclipse構建的配置文件。
  • 從外部編譯此源文件時,它將生成多個.class文件(不只是一個)。除了存在於同一個源文件中之外,這兩個類彼此之間沒有任何關係,您可以明確地選擇。您想要在JVM中啓動的類。

即:

java TestMainFunction 
java ClassOne 
java ClassTwo 
+1

@JBNizet - 同意並納入。 – Perception 2013-02-26 12:33:37