當調用存在於另一個類的「主」,這是很容易,只是說:何時調用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
靜態讓人頗爲毫無意義。
另一個非常好的一點。 –