获取class类对象的四种方式
public class InvocationMethod {
public static void main(String[] args) throws ClassNotFoundException {
Class<TargetObject> class1 = TargetObject.class;
Class<? extends TargetObject> class2 = new TargetObject().getClass();
Class<?> class3 = ClassLoader.getSystemClassLoader().loadClass("com.xwz.invacate.TargetObject");
Class<?> class4 = Class.forName("com.xwz.invacate.TargetObject");
System.out.println(class1.getName());
System.out.println(class2.getName());
System.out.println(class3.getName());
System.out.println(class4.getName());
}
}
Java反射基本操作
public class TargetObject {
private String name;
public TargetObject() {
this.name = "mary";
}
public void publicMethod(String string){
System.out.println("这是一个public方法,这是你用反射传入的字符串 :"+string);
}
private void privateMethod(){
System.out.println("这是一个private无参方法 : " + name);
}
}
class Main{
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException, ClassNotFoundException {
Class<?> targetObjectClass= Class.forName("com.xwz.invacate.TargetObject");
TargetObject targetObject = (TargetObject) targetObjectClass.newInstance();
Method[] methods = targetObjectClass.getDeclaredMethods();
for(Method method : methods){
System.out.println(method.getName());
}
Method publicMethod = targetObjectClass.getDeclaredMethod("publicMethod", String.class);
publicMethod.invoke(targetObject,"这是一个字符串参数");
Field name = targetObjectClass.getDeclaredField("name");
name.setAccessible(true);
name.set(targetObject,"jesse");
Method privateMethod = targetObjectClass.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true);
privateMethod.invoke(targetObject);
}
}