反射:java.lang.reflect
要被加载的类:
package eg.fortest; public class WaitingforLoader { private String str; static{ System.out.println("loading WaitingforLoader"); } public WaitingforLoader() { str="empty"; System.out.println("Constructor of WaitingforLoader without anything."); } public WaitingforLoader(String str) { this.str=str; System.out.println("Constructor of WaitingforLoader with "+str); } public void getStr(int i){ System.out.println("str="+str); } }
加载运行的类:
package factory.classfactory; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; //import eg.fortest.WaitingforLoader;不需要这条语句 public class LoadMyClass { public static void main(String[] args) throws ClassNotFoundException, InstantiationException,IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { System.out.println("Program start."); /** * 类的加载、链接、初始化。 */ Class<?> clazz = Class.forName("eg.fortest.WaitingforLoader"); /** * 对象的创建 */ Object myvar1 = clazz.newInstance(); Constructor cor=clazz.getConstructor(String.class); Object myvar2 =cor.newInstance("string Parameter"); /** * 方法调用 */ Method m =clazz.getMethod("getStr",int.class); m.invoke(myvar2, 1); } }
输出的结果:
Program start.
loading WaitingforLoader
Constructor of WaitingforLoader without anything.
Constructor of WaitingforLoader with string Parameter
str=string Parameter
时间: 2024-10-17 15:14:28