当调用存在于另一个类的“主”,这是很容易,只是说:何时调用main而不是调用main?
otherClass.main(stringArgs);
什么是落后首先使用反射来获取类,然后调用方法,而不是调用它的原因以静态的方式?
当调用存在于另一个类的“主”,这是很容易,只是说:何时调用main而不是调用main?
otherClass.main(stringArgs);
什么是落后首先使用反射来获取类,然后调用方法,而不是调用它的原因以静态的方式?
原因可能是,如果使用反射,则不需要对调用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" });
我不知道为什么你曾经这样做。我从来不需要以这种方式调用另一个主要方法,除非我正在做一些事情或做实验。
但通常使用反射来调用一个方法,而不是直接调用它的时候,你不知道有足够的了解你调用类,或当你在搜索和调用标有注释的方法。
这就是反射是为那些。
有很多理由使用反射。但是如果你有一个类的实例(或者如果我们正在谈论一个静态方法时有一个类的名字)并且知道你想调用的方法的名字(在编译期间),你不应该使用反射。
给你一个例子,使用反射的一个原因是,如果你出于某种原因拥有一个String
包含一个方法名称(假设你从用户那里获得这个名称)并且想要调用这个特定类的方法。你显然不能只说otherClass.methodName
,因为methodName
将根据用户输入的内容而有所不同。
在大多数情况下,根本不需要调用main
,而是在构建时不知道类的情况下,甚至可能不在调用的代码库内部。这可能是您经常目睹main
反射电话的原因。
事实上,呼吁main
静态让人颇为毫无意义。
另一个非常好的一点。 –