------- android培训、java培训、期待与您交流! ----------
反射
1.反射就是把java类中的各种成分映射成相应的java类
2.java程序中的各个java类属于同一类事物,描述这类事物的类名就是Class
3.获取各个字节码对应的实力对象有三种方法
方法一:类名.class
方法二:对象.getclass();
方法三:Class.forName("类名"); 这种方法最常用,也最具有灵活性
Constructor类:代表某个类的一个构造方法
演示:得到一个类的构造方法
import java.lang.reflect.Constructor;
public class ClassDemo {
public static void main(String[] args) throws Exception {
Class cla = String.class;
Constructor c = cla.getConstructor(String.class);
String str = (String)c.newInstance("哈哈");
}
}
演示:获取到一个类中的字段
public class ClassDemo {
public static void main(String[] args) throws Exception {
Class cla = Demo.class;
Demo d = (Demo) cla.newInstance();
Field f = cla.getField("str");
Field f1 = cla.getDeclaredField("id");//获取隐藏的
f1.setAccessible(true);//设置成可见的
System.out.println(f1.get(d));
}
}
class Demo{
public String str = "嘿嘿";
private int id = 55;
}
演示:获取到一个类中的方法
public class ClassDemo {
public static void main(String[] args) throws Exception {
Class cla = Demo.class;
Demo d = (Demo) cla.newInstance();
Method m = cla.getMethod("show",null); //获取方法
m.invoke(d,null); //运行方法
}
}
class Demo{
public String str = "嘿嘿";
private int id = 55;
public void show(){
System.out.println("show...run");
}
}
例子: ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象
import java.lang.reflect.Method;
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception{
ArrayList<Integer> list = new ArrayList<Integer>();
Class<?> cla = list.getClass(); //获取ArrayList的字节码对象
Method m = cla.getMethod("add",Object.class); //获取add添加方法
m.invoke(list,"haha"); //运行add方法,添加字符串到ArrayList中
m.invoke(list,"heihei");
for(int x =0;x<list.size();x++){ //输出
System.out.println(list.get(x));
}
}
}