【问题标题】:Can a main method in Java return something?Java中的main方法可以返回一些东西吗?
【发布时间】:2011-10-31 02:39:14
【问题描述】:

我最近参加了一次面试,他们问了我两个关于核心 Java 的问题。

问 1。

我们可以写一个java类吗:

public static int main(String[] args){
     System.out.println("Hello");

我回答:不。编译器不会编译它,因为它期望main 的返回类型是int,尽管我们可以重载它。

Q 2:我无法回答的下一个问题。

编写一个程序,以便您的 Java main 方法可以返回一些内容。

即你怎么能让public static void main([] args)返回东西?

谁能帮我回答这个问题?

【问题讨论】:

    标签: java


    【解决方案1】:

    Q 1. 我们可以写一个java类吗:public static int main(String[] args){

    是的,你可以,但你不能运行那个 Java 类。

    示例类:

    class MainTest {
    
            public static int main(String[] args) {
                    return 1;
            }
    }
    

    您在尝试运行时会收到一条错误消息:

    Error: Main method must return a value of type void in class MainTest, please 
    define the main method as:
       public static void main(String[] args)
    

    Q 2:下一个问题我无法回答。他要求这样写一个程序 你的 java main 方法可以返回一些东西。

    您可以使用System#exit(int) 退出您的程序,并使用操作系统可以解释的特定退出代码。

    【讨论】:

      【解决方案2】:

      通常,在main 返回int 的语言(例如C 和C++)中,main 的返回码成为进程的退出码,命令解释器和其他外部程序经常使用它来确定该过程是否成功完成。要在 Java 中达到相同的效果,请使用 System.exit 方法(类似于标准 C 函数 exit),如下所示:

      public static void main(String[] args) {
        System.exit(42);
      }
      

      引用上面链接的 Java 文档:

      终止当前运行的 Java 虚拟机。该参数用作状态码;按照惯例,非零状态码表示异常终止。

      【讨论】:

      • 我可以捕获这个返回值并在控制台显示它吗?
      • @DeepakSharma 不是来自同一个程序。您可以使用您选择的 shell 语言编写包装脚本,但是在 Java 中调用 System.exit将不间断地终止运行时。
      【解决方案3】:

      不能从 Java 主函数返回值。然而,程序可以返回一个状态码。

      尝试以下操作以在 Java System.exit(45) 中以 int 状态退出

      【讨论】:

      • 您的回答没有解释它的作用以及为什么它可能与从 main 返回一个 int 相当。
      • @secretformula:你的回答写得像老师给出一些信息,希望学生跟进并了解更多。在 StackOverflow 上,目的是提供完整的答案,这不仅有助于最初的提问者,而且还为后来的人提供完整的答案。因此,您可能希望将来更多地充实此类答案。
      【解决方案4】:

      这样做的一种方法是在方法 main 的内部修改 args[i] 的值,因为 i 小于 args.length。

      例子:

      public class Test{
      //
      public static void main(String[] args){
             args[0] = "a value";
             args[1] = "another value";
      }
      }
      

      来自另一个班级:

      public class Other{ 
      public static void main(String[] args){
          String[] result={"",""};
              Test.main(result);
              System.out.println(result[0]);
              System.out.println(result[1]);
      }
      }
      

      那么输出是:

      价值
      另一个值

      【讨论】:

        【解决方案5】:

        是的,我们可以编写返回类型不是 void 的 main 方法。这仅仅意味着我们可以重载我们的 main 方法。一些例子是

        1. public static void main(String ... x){ }
        2. public static int main(String []args){ }
        3. public static void main(string array[]){ }

        但是,这里注意编译器只会知道

        public static void main(String []args){ }
        

        如果上述方法不存在,它将无法编译。

        【讨论】:

        • 谁赞成这种废话?不同的返回类型并不意味着重载,Anurag 在这里展示的也不是重载,只是表示相同参数类型的不同方式。而且如果没有main方法,编译失败显然是无稽之谈。
        【解决方案6】:

        是的,你可以返回 void 类型。但是该值将转到 JVM,并且返回后不会执行更多代码,因为控制将返回到调用 main() 的 JVM

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-06
          • 2020-08-01
          • 1970-01-01
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多