Java 中的"main"可以返回字符串吗?



是否有可能在java中公共静态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)

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

主方法的返回类型必须是void,因为java语言规范强制这样做。12.1.4。

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

  • System.inSystem.out
  • 套接字

不,你不能…一旦主程序结束,程序就死了。所以你不会从中得到任何好处。你的目的是什么?你想达到什么目标?

你可以用其他方法把所有的都包装起来,然后把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);
}

你可以,但是你不能开那门课。你会得到错误

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)

No。如果要成为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
}

这是一个非常有趣的场景。一般来说,我们可以改变任何返回void的方法来返回其他任何东西,而不会有太大的影响,但main方法是个特例。

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

但是在Java中(其中多线程概念的情况下),从main方法返回值将是不正确的,因为main方法返回到JVM而不是操作系统。然后JVM完成其他线程,例如守护线程(如果有的话),并在退出操作系统之前执行其他退出任务。

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

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

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

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

我特别强调。

如果您确实非常需要它返回一些东西(而您并不需要),请将输出分配给一个静态变量。那你就不用回来了。即

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

现在你有了String a,你可以在任何你想用的地方使用它但是我没有看到任何使用

答案是否定的

程序运行时,JVM寻找一个名为main()的方法,该方法接受字符串数组作为输入,不返回任何值(即返回类型为void)。但是如果它没有找到这样的方法( main()方法返回String例如),所以它会抛出java.lang.NoSuchMethodError

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

现在,在java中,程序是由操作系统加载的,但执行是由JRE完成的。JRE本身负责程序的成功执行。因此,不需要更改返回类型。

这就像把你的问题告诉上帝,而上帝却把问题交给你去解决。

相关内容

  • 没有找到相关文章

最新更新