java中的“main”可以返回一个String吗?

时间:2014-05-25 15:10:24

标签: java string return

java中的public static void main(String [] args)是否可能返回String而不是void?如果有,怎么样?

    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)

10 个答案:

答案 0 :(得分:6)

简而言之 - 不,它不能。 您始终可以使用主要方法(使用System.out.printSystem.out.println)打印到stdout,但不能更改main的返回类型。

答案 1 :(得分:4)

main方法的返回类型必须是void,因为java语言规范强制执行它。请参阅12.1.4

对于进程间通信,您可以使用:

  • System.inSystem.out
  • 套接字

答案 2 :(得分:2)

不,你不能......一旦主要完成,程序就死了。所以你没有任何好处......你的目的是什么?你想要实现的目标是什么?

您可以将all包装在将String返回到main的其他方法中。

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);
}

答案 3 :(得分: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)

答案 4 :(得分: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
}

答案 5 :(得分:1)

这是一个非常有趣的场景。虽然一般来说,我们可以更改任何返回void的方法,以便在没有太大影响的情况下返回任何其他方法,主方法是一种特殊情况。

在早期的编程语言中,main方法的返回应该是将退出值返回给操作系统或调用环境。

但是在Java(多线程概念案例进入图片中)的情况下,从main方法返回一个值是不对的,因为main方法返回到JVM而不是OS。 JVM然后完成其他线程,例如deamon线程(如果有)并在退出OS之前执行其他退出任务。

因此允许main方法返回,会导致开发人员的错误期望。因此不允许。

答案 6 :(得分:0)

是的,这绝对有可能。也就是说,您可以定义方法public static String main(String[] args)。这就像定义任何其他方法一样。

然而,它不会是一个主要的方法尽管它的名称,因此在执行像main方法的程序时将不会运行。引用Java语言规范,§12.14:

  

方法main必须声明为public,static和 void

强调我的。您不能在Java中使用非void主方法。

答案 7 :(得分:0)

如果你真的,真的需要它来返回一些东西(你不会),将输出分配给一个静态变量。那你就不需要回来了。即

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

现在您拥有String a,无论您想使用它还是使用它,但我都没有看到它的用法。

答案 8 :(得分:0)

答案是否定的。

当程序运行时,JVM会查找名为main()的方法,该方法将一个字符串数组作为输入,不返回任何内容(即返回类型为空)。但是如果它没有找到这样的方法(例如, main()方法返回String ),那么它会抛出 java.lang.NoSuchMethodError

答案 9 :(得分:0)

在java之前,在C或C ++中,main函数可以声明为int或void。为什么?因为主要方法是由OS调用的,它不负责程序的成功/不成功执行。因此,为了让操作系统知道程序执行成功,我们提供了一个返回值。

现在,在java中,程序由OS加载,但执行由JRE完成。 JRE本身负责程序的成功执行。因此,无需更改返回类型。

这就像向上帝讲述你的问题一样,当上帝给你解决问题时,你会有问题。