获取 Class 的方式有三种
类 obj=new 类;
//获取该对象所获取类的信息
Class class=Cat.class;
Class catcat.gteClass();
Class cat.forName(“包名+类名”);
public class bean {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public bean() {
}
public bean(String name) {
this.name = name;
}
private void getdata() {
System.out.println("---------private");
}
}
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class mymain {
public static void main(String[] args) {
bean b = null;
// 通过类获取类的信息
Class myclass = bean.class;
try {
b = (bean) myclass.newInstance(); // bean 要有无参构造器否则会报错
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 传参的构造函数
try {
Constructor c = myclass.getConstructor(String.class);
b = (bean) c.newInstance("Tom");
System.out.println(b.getName());
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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();
}
// 获取类的所有方法包括私有方法
Method[] method = myclass.getDeclaredMethods();
for (int i = 0; i < method.length; i++) {
String name = method[i].getName();
System.out.println(name);
}
// 获取属性值
Field[] value = myclass.getDeclaredFields();
for (int i = 0; i < value.length; i++) {
System.out.println(value[i].getName());
}
value[0].setAccessible(true);
String name;
try {
name = (String) value[0].get(b);
System.out.println(name);
} catch (IllegalArgumentException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 反射调用其方法
try {
Method m = myclass.getDeclaredMethod("getdata");
m.setAccessible(true);
m.invoke(b);
} catch (NoSuchMethodException | SecurityException 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();
}
}
}