反射加载
反射加载有三种方法
1.Class clazz= Class.forName(包名.类名); (提示:使用此方法会运行相关类里面的static代码块)
2.Class clazz = 类名.class
3.Class clazz = new 类名().getClass();
反射得到构造方法创建实例
public class Person{
public Person(){
System.out.println("无参");
}
public Person(String name){
System.out.println("有参"+name);
}
private Person(int age){
System.out.println("有参私有"+age);
}
}
- 得到构造方法
Class clazz = Person.class
Constructor c = clazz.getConstructor(null);//得到无参
Constructor c1 = clazz.getConstructor(String.class);//得到有参
Person p = (Person)c.newInstance(null);//得到person对象
Person p1 = (Person)c.newInstance("");//得到person对象
//得到私有构造方法创建实例
Constructor c2 = getDeclaredConstructor(int.class);
c2.setAccessible(true);//设置:私有可反射(容易的)
Person p2 = (Person)c.newInstance(1);//得到person对象
反射得到方法并运行
public class Person{
public Person(){
}
public void test(){
}
private void test(String name){
System.out.println("私有方法"+name);
}
}
Person p = new Person();
Class clazz = Person.class
Method m = clazz.getMethod("test",null);//得到无参方法
m.invoke(p,null);//调用方法
//得到私有方法
Method m1 = clazz.getDeclaredMethod("test",String.class);
m1.setAccessible(true);//设置:私有可反射(容易的)
m1.invoke(p,"haha");
反射得到字段
都是一个样,这里就不表述了.