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)
答案 0 :(得分:6)
简而言之 - 不,它不能。
您始终可以使用主要方法(使用System.out.print
或System.out.println
)打印到stdout,但不能更改main
的返回类型。
答案 1 :(得分:4)
答案 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本身负责程序的成功执行。因此,无需更改返回类型。
这就像向上帝讲述你的问题一样,当上帝给你解决问题时,你会有问题。
)