2014-05-25 49 views
5

java中的public static void main(String [] args)是否可能返回String而不是void?如果是,如何?而不是java中的「main」可以返回一個String嗎?

public static String main(String[] args) 

public static void main(String[] args) 

當我改變我的代碼如下:

public static String main(String[] args) throws IOException { 
    String str = null; 
    TurkishMorphParser parser = TurkishMorphParser.createWithDefaults(); 
    str = new Stm(parser).parse("bizler"); 
    System.out.println("str = " + str); 
    String replace = str.replace("[",""); 
    String replace1 = replace.replace("]",""); 
    List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(","))); 
    String result = result1.get(0); 
    System.out.println("Result = " + result); 
    return result; 


} 

我收到此錯誤:

Error: Main method must return a value of type void in class Stm, please define the main method as: 
    public static void main(String[] args) 
+0

不可能具有相同的方法參數。方法重載是由參數類型定義的,而不是由返回類型計數。 – Braj

+7

例外是告訴你不能,所以沒有你不能。 – jordan

+3

問問你自己,它會把它返回給*,它會返回什麼樣的結果呢? – Boann

回答

6

簡而言之 - 不,這不能。 您可以隨時從主要方法(使用System.out.printSystem.out.println)打印到stdout,但不能更改main的返回類型。

2

不,你不能......一旦主要完成該程序已經死了..所以你沒有任何好處..你有什麼目的?你試圖達到什麼目的?

你可以用其他方法包裝所有其他的方法,將返回字符串到你的主。

public static void main(String[] args) throws IOException { 
    String result = doSomething(); 
return result; 


} 
public static String doSomething() { 
    String str = null; 
    TurkishMorphParser parser = TurkishMorphParser.createWithDefaults(); 
    str = new Stm(parser).parse("bizler"); 
    System.out.println("str = " + str); 
    String replace = str.replace("[",""); 
    String replace1 = replace.replace("]",""); 
    List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(","))); 
    String result = result1.get(0); 
    System.out.println("Result = " + result); 
} 
2

是的,你可以但你不能運行這個類。你會得到錯誤

class Test { 

     public static String main(String[] args) { 
       return "1"; 
     } 
} 

你會得到錯誤的

Error: Main method must return a value of type void in class Test, please 
define the main method as: 
    public static void main(String[] args) 
+0

有點不正確。你不能用通常的方式來運行這個類。但是你可以編寫一個自定義的加載器來執行修改過的main。 – Jus12

2

號的是一個main()方法,它必須返回任何結果(即是void)。

public static void main(String[] args) throws IOException { 
    myMain(args); 
} 

public static String myMain(String[] args) throws IOException { 
    // your method, which can now be called from anywhere in your code 
} 
0

是的,這是絕對有可能:

但是,如果你需要你的方法返回的東西的功能,你可以重構你的代碼。也就是說,您可以定義方法public static String main(String[] args)。這就像定義任何其他方法一樣。

然而,它不會是一個主要的方法儘管它的名字,因此將不會運行時執行一個像main方法一樣的程序。引用Java語言規範,§12.14:

The method main must be declared public, static, and void.

強調我的。 Java中不能包含無效的主要方法。

+0

如果在同一個類中運行,聲明將具有相同的簽名。 – Makoto

+0

@Makoto,我不明白這與此有關。 – kviiri

+0

它會。如果你聲明瞭'public static void main(String [] args)'和'public static String main(String [] args)',那麼它將不會被編譯,因爲兩個方法都有相同的簽名。在解決這一問題之前,這不是一個完整的答案。 – Makoto

3

主方法的返回類型必須爲void,因爲java語言規範會強制執行它。見12.1.4

進程間通信您可以使用:

  • System.inSystem.out
  • 套接字
1

這是一個非常有趣的場景。一般來說,我們可以改變任何返回void的方法來返回其他沒有太大影響的東西,main方法是一個特例。

在早期的編程語言中,main方法的返回應該是將退出值返回給OS或調用環境。

但是在Java的情況下(其中多線程概念大小寫成圖片),從main方法返回值將不正確,因爲主方法返回到JVM而不是OS。 JVM然後完成其他線程,例如deamon線程(如果有)並在退出到OS之前執行其他退出任務。

因此,允許main方法返回,會導致開發人員錯誤的期望。因此不允許。

0

如果你確實需要它返回某些東西(你不知道),那麼將輸出分配給一個靜態變量。那麼你不需要返回。即

static String a = ""; 
public static void main(String[] args){ 
    //do sth 
    a = "whatever you want"; 
} 

現在你有String a,使用它。無論您想使用,但我沒有看到這方面的任何用途。

0

答案是否定的。

程序運行時,JVM查找名爲main()的方法,該方法以字符串數組作爲輸入並且不返回任何內容(即返回類型爲void)。但是,如果它沒有找到這樣的方法(的main()方法將返回字符串例如),所以它拋出一個java.lang.NoSuchMethodError

0

的Java之前,C或C++,主要功能可能被宣佈爲無效。爲什麼?因爲主方法是由操作系統調用的,它不負責程序的成功/不成功執行。因此,爲了讓操作系統知道程序成功執行,我們提供了一個返回值。

現在,在java中,程序由OS加載,但執行由JRE完成。 JRE本身負責成功執行程序。所以,不需要改變返回類型。

這將像是告訴你的問題上帝,當上帝自己給你的問題來解決它們。

;)

相關問題