何时调用main而不是call main?

时间:2013-08-01 14:22:06

标签: java class reflection main invocation

致电" main"存在于另一个类中,很容易说:

 otherClass.main(stringArgs);

除了以静态方式调用它之外,首先使用反射来获取类然后调用方法的原因是什么?

4 个答案:

答案 0 :(得分:4)

原因可能是,如果使用反射,则不需要对要调用main方法的类具有编译时依赖性。您可以使用Class.forName(...)动态加载类,然后使用反射来查找main方法并调用它。

String name = "com.mycompany.MyMainClass";

// Load the class dynamically
Class<?> mainClass = Class.forName(name);

// Find the 'main' method that takes a string array
Method mainMethod = mainClass.getMethod("main", new Class<?>[] { String[].class });

// Invoke the method; first arg is null, because the method is static
mainMethod.invoke(null, new String[] { "one", "two" });

答案 1 :(得分:1)

我不知道为什么你这样做。我从来不需要以这种方式调用另一个主要方法,除非我做了一些hacky或实验。

但通常你会使用反射调用方法,而不是在你不熟悉你正在调用的类时,或者在你搜索和调用标注注释的方法时直接调用它。

这就是反思的意思。

答案 2 :(得分:1)

使用反射的原因有很多。但是如果你有一个类的实例(或者如果我们讨论静态方法的类的名称)并且知道你想要调用的方法的名称(在编译时),你不应该使用反射

举个例子,使用反射的一个原因是,出于某种原因,如果您有String包含方法名称(假设您是从用户那里得到的),并且想要调用此方法特定的课程。您显然不能只说otherClass.methodName,因为methodName会因用户输入的内容而有所不同。

答案 3 :(得分:1)

在大多数需要调用main的用例中,它是在构建时不知道类的上下文中,并且可能甚至不在代码库内部进行调用。这可能是您经常目睹main的反思性调用的原因。

事实上,静态调用main毫无意义。