2013-05-08 51 views
-4

我無法找到正確的原因。在main方法中獲取異常的主要方法中的靜態鍵名「main」java.lang.NoSuchMethodError:main

public class MainTest {  
    static public void main(String[] args) { 

      System.out.println("HAI"); 
    } 
    } 

當我運行這段代碼的輸出是:HAI

static class MainTest { 
     static void main(String[] args) { 

       System.out.println("HAI"); 
     } 
     } 

此代碼編譯fine.But當我跑我得到異常Main method not public

public class MainTest { 
     public void main(String[] args) { 

       System.out.println("HAI"); 
     } 
     } 

此代碼編譯fine.But當我跑我得到例外

Exception in thread "main" java.lang.NoSuchMethodError: main 

有人可以解釋這種行爲的原因。

如果我沒有指定靜態爲什麼它不作爲實例方法。 當我沒有在課外使用時,爲什麼我需要將主要方法作爲公開使用? 如果因爲靜態主要方法調用可以將主要方法邏輯放在任何靜態方法中並且使用主要方法嗎?

+3

因爲主要方法是入口點。是公開的,以便它可以從任何地方被調用(沒有公開,只能從包內調用)。它必須是靜態的,因此不需要實例化類就可以調用它。這就是Java的設計。 – Supericy 2013-05-08 02:08:54

+0

@Supericy但是我在這裏不能訪問包裹 – PSR 2013-05-08 02:19:29

回答

2

關鍵字public表示包含該方法的類的任何類可能會調用此方法。 main的情況就是這樣,JVM的一些不明確的對象需要調用此類中的main方法。

關鍵字static表示該方法不需要它所處類的任何特定屬性。由於每個Java程序都是從沒有創建除JVM中固有的對象之外創建的對象開始的,因此Java開發人員決定讓它主要的靜態。

簡而言之,永遠不應該存在主要需要成爲類的實例方法的情況,因爲該類必須首先創建,並且在實際調用之前無法將其告訴JVM主要功能。

+0

那麼,爲什麼我使用主method.Can我使用任何主要方法靜態方法 – PSR 2013-05-08 02:17:02

+0

的JVM只是預計,對於任何應用程序的入口點會被稱爲主。 (這是爲了幫助防止開發人員在拍攝腳本身。) – 2013-05-08 02:19:53

+0

如果我把主要方法的代碼放到一個靜態方法 – PSR 2013-05-08 02:21:11

1

公共靜態無效的主要(字符串ARGS [])

你應該總是包括3個關鍵字:公共,靜態和無效

+0

爲什麼?我需要原因和解釋 – PSR 2013-05-08 02:08:46

+0

我認爲這裏的解釋就足夠了:http://javarevisited.blogspot.com/2011/12/main-public-static- Java的空隙的方法,這是爲什麼。HTML – renz 2013-05-08 02:14:01

+0

+1的鏈接 – PSR 2013-05-08 02:30:42

1

如果一個方法沒有任何說明符(如在你的第二個例子),那麼它只能被同一個包(同一個文件夾)中的其他java文件訪問。這會在JVM嘗試運行代碼時導致問題,因爲它不是該程序包的一部分。

爲了理解你的第三點,你必須瞭解實例方法是如何工作的。他們只能在實例上調用 - 因此JVM必須在調用main之前使用構造函數實例化您的類。 Java的設計者認爲要求main是靜態的會更簡單,所以如果它不是靜態的,會導致錯誤。

+0

從那裏JVM運行我code.I不是要求任何地方 – PSR 2013-05-08 02:13:21

+0

那麼,爲什麼我使用主method.Can我使用任何靜態方法 – PSR 2013-05-08 02:17:43

相關問題