package 算法;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import JVMLearn.Demo;
public class 反射 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Class<?> ab=ClassLoader.class.forName("算法.Dome");
// Class<?> ab=Class.forName("算法.Demo");//这种写法也行
System.out.println(ab.getName());
Dome dome=(Dome)ab.newInstance();
dome.c="dd";
Method method=ab.getMethod("f", String.class);
method.invoke(ab.newInstance(), "嘻嘻");
method.invoke(new Dome(), "哈哈");
method=ab.getMethod("f", int.class);
Object object=method.invoke(ab.newInstance(), 1);
System.out.println(object);
System.out.println(method);
method=ab.getMethod("b",String.class);
Object object1=method.invoke(ab.newInstance(), "b");
System.out.println(object1);
System.out.println(method);
Field field=ab.getField("c");
Object obj=ab.newInstance();
field.set(obj, "我是字段c");
System.out.println(field.get(obj));
field=ab.getField("d");
int[] b=(int[]) field.get(obj);
System.out.println(field.get(obj));
System.out.println(b.length);
Field[] fields=ab.getFields();
for(Field f:fields){
System.out.println(f.getName());//字段名
System.out.println(f.getGenericType());//字段类型所在包路径,如果是对象类型则打印该对象的路径
System.out.println(f.getType());//类型+路径
System.out.println(f.getType().getName());//类型路径
//可通过截取字符串得到想要的结果
}
}
}
class Dome{
public String c;
public int[] d={1,2,34,5};
public void f(String as){//必须是public ,否则反射时无法获取
System.out.println("eee");
System.out.println(as);
}
public boolean f(int a){
return a==1;
}
public String b (String b){
return b;
}
}