是否有可能在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.print
或System.out.println
)打印到stdout,但是您不能更改main
的返回类型。
主方法的返回类型必须是void
,因为java语言规范强制这样做。12.1.4。
对于进程间通信,您可以使用:
-
System.in
和System.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本身负责程序的成功执行。因此,不需要更改返回类型。
这就像把你的问题告诉上帝,而上帝却把问题交给你去解决。
。