Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can";“主要”;在java中返回字符串?_Java_String_Return_Main - Fatal编程技术网

Can";“主要”;在java中返回字符串?

Can";“主要”;在java中返回字符串?,java,string,return,main,Java,String,Return,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;

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;        
}
简言之,不,它不能。
您始终可以从main方法打印到stdout(使用
System.out.print
System.out.println
),但您不能更改
main
的返回类型。不,您不能。。。一旦主程序完成,程序就失效了。。所以你从中没有任何好处。。你的目的是什么?你想达到什么目的

您可以将所有内容包装到将字符串返回到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);
}
publicstaticvoidmain(字符串[]args)引发IOException{
字符串结果=doSomething();
返回结果;
}
公共静态字符串doSomething(){
字符串str=null;
TurkishMorphParser=TurkishMorphParser.createWithDefaults();
str=newstm(parser.parse(“bizler”);
System.out.println(“str=“+str”);
字符串replace=str.replace(“[”,”);
字符串replace1=replace.replace(“]”,“”);
List result1=newarraylist(Arrays.asList(replace1.split(“,”));
字符串结果=result1.get(0);
System.out.println(“结果=”+结果);
}

可以,但不能运行该类。你会犯错误的

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)
不可以。要成为
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
}

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

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

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


我的。Java中不能有非void主方法。

主方法的返回类型必须是
void
,因为Java语言规范强制执行它。看

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

  • System.in
    System.out
  • 插座

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

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

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


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

      如果您确实需要它返回某些东西(您不需要),请将输出分配给静态变量。那你就不需要回来了。i、 e

      static String a = "";
      public static void main(String[] args){
           //do sth
           a = "whatever you want";
      }
      
      现在您有了
      字符串a
      ,可以在任何您想使用的地方使用它,但我看不出它有任何用途。

      答案是否定的


      当程序运行时,JVM查找名为main()的方法,该方法将字符串数组作为输入,不返回任何内容(即返回类型为void)。但是如果没有找到这样的方法(<强> main()方法,例如返回字符串),那么它在java之前,在java或C++中抛出一个<强> java.为什么?因为main方法是由操作系统调用的,操作系统对程序的成功/不成功执行不负责。因此,为了让操作系统知道程序成功执行,我们提供了一个返回值

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

      这就像是把你的问题告诉上帝,而上帝自己却给你问题来解决它们


      )()

      不可能使用相同的方法参数。方法重载是由参数类型定义的,计数不是由返回类型定义的。异常告诉您不能,所以不,您不能。问问自己,它将返回到什么位置,以及它返回时的预期用途是什么?system.exit(“”)-正在进行中-这里更好地解释一下,如果在同一个类中运行,声明将具有相同的签名。@Makoto,我不明白这与此有什么关系。它会的。如果声明了
      publicstaticvoidmain(String[]args)
      publicstaticstringmain(String[]args)
      ,则不会编译,因为这两个方法都具有相同的签名。在解决这一点之前,这不是一个完整的答案。@Makoto,是的,但我看不出在同一个类中有关于
      main
      两个版本的问题。只有关于
      main
      是否可以返回
      String
      而不是
      void
      ,我已经回答了。有点不正确。您不能使用常规方式运行该类。但是您可以编写一个自定义加载程序来执行修改后的main。
      static String a = "";
      public static void main(String[] args){
           //do sth
           a = "whatever you want";
      }