为什么需要反射机制 反射的好处
动态编译和静态编译
package 设计模式;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class Person {
String name = "renbin";
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name) {
this.name = name;
}
public void lovesb(String name) {
System.out.println(this.name+"love"+name);
}
public void sblove() {
System.out.println("lilove"+this.name);
}
}
public class Reflect {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person object = null;
/*反射无参构造函数产生对象*/
try {
object = (Person) Class.forName("设计模式.Person").newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*调用无参方法*/
try {
/*第一个参数是方法的名字,第二个参数是参数类型,多个参数就编写多个类型*/
Method method = Person.class.getMethod("sblove", null);
Object returnobj = method.invoke(object);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*调用有参方法*/
try {
Method method = Person.class.getMethod("lovesb", String.class);
/*"liqian 是参数"*/
Object returnobj = method.invoke(object,"liqian");
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// /*调用有参构造函数反射产生对象*/
// try {
// object = (Person)Class.forName("设计模式.Person").
// getConstructor(String.class).newInstance("liqianyu");
// } catch (InstantiationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// System.out.println(object.name);
}
}