27
public class A{
    public static void main(String[] args)
    {
        //Main code
    }
}

public class B{
    void someMethod()
    {
        String[] args={};
        A.main();
        System.out.println("Back to someMethod()");
    }
}


有没有办法做到这一点?我找到了一种使用反射做同样事情的方法,但它也不会返回到调用代码。我尝试使用ProcessBuilder在一个单独的进程中执行它,但我想我错过了一些东西。

4

5 回答 5

40

您的代码几乎已经做到了 - 它只是没有传递参数:

String[] args = {};
A.main(args);

main方法仅在被视为入口点方面是“特殊的”。否则,这是一个完全正常的方法,可以从其他代码中毫无问题地调用。当然,如果它的编写方式只期望它被称为入口点(例如,如果它使用System.exit),那么你可能会遇到问题,但从语言的角度来看它很好。

于 2013-06-13T19:56:37.360 回答
6

是的,你可以打电话A.main()

你可以这样做:

String[] args = {};
A.main(args);

如果您不关心参数,那么您可以执行以下操作:

public static void main(String ... args)

并调用它:

A.main(); //no args here
于 2013-06-13T19:58:10.167 回答
3

“main”这个名字没有什么神奇之处。你的草图应该可以工作,所以你的问题一定是别的。通过将“main”的名称更改为其他名称来测试我的声明,我敢打赌它仍然不起作用。

于 2013-06-13T19:59:13.620 回答
3

实际上,您可以main像刚才询问的方式那样调用方法,但不能像以前那样调用方法。首先,每个执行过程都是从main方法开始的。所以,如果你想以你想要的方式去做,你可以这样做。此代码将执行Hello! World八次:

class B
{
  B()
  {
    while(A.i<8)
    {
      String a[]={"Main","Checking"};
      A.main(a);
    }
    System.exit(0);
  }

}

class A
{
  public static int i=0;
  public static void main(String args[])
  {
    System.out.println("Hello! World");
    i++;
    B ob=new B();
  }
}

` 迭代部分,如果你愿意,你可以离开它。我希望我以您想要的方式为您提供解决方案。:)

于 2016-11-07T14:52:50.633 回答
1

当然。字符串 [] 参数 = {}; A.main(args);

请注意:从纯粹的你那里,主要方法仍然是程序的入口点。现在,如果您尝试在新的 PROCESS 中运行 main 方法,那就是另一回事了。

于 2013-06-13T19:58:48.413 回答