2013-08-01 60 views
0

当调用存在于另一个类的“主”,这是很容易,只是说:何时调用main而不是调用main?

otherClass.main(stringArgs); 

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

回答

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" }); 
+0

另一个非常好的一点。 –

1

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

但通常使用反射来调用一个方法,而不是直接调用它的时候,你不知道有足够的了解你调用类,或当你在搜索和调用标有注释的方法。

这就是反射是为那些。

1

有很多理由使用反射。但是如果你有一个类的实例(或者如果我们正在谈论一个静态方法时有一个类的名字)并且知道你想调用的方法的名字(在编译期间),你不应该使用反射。

给你一个例子,使用反射的一个原因是,如果你出于某种原因拥有一个String包含一个方法名称(假设你从用户那里获得这个名称)并且想要调用这个特定类的方法。你显然不能只说otherClass.methodName,因为methodName将根据用户输入的内容而有所不同。

1

在大多数情况下,根本不需要调用main,而是在构建时不知道类的情况下,甚至可能不在调用的代码库内部。这可能是您经常目睹main反射电话的原因。

事实上,呼吁main静态让人颇为毫无意义。

相关问题