java反射学习笔记一

昨晚学了reflection,感觉很XXX,这是基础,已前自己却从未了解过,内牛满面啊


1 用反射必须用CLass类



每一个对象都会对应一个唯一的class ,有三种方式可以得到某一个对象的Class,已String对象为例。

1>、 Class cl1= java.lang.String.class;

2>、 CLass cl2= java.lang.String.getClass();

3>、 CLass cl3= Class.forName("java.lang.String");

其中,AA.class 和AA.getCLass();是不一样的,如果AA是最终的对象,则一样,如果AA比如是Object ,而AA其实是User类
那么AA.class就是得到object的Class,而AA.getClass得到的是User的实例。

2 通过Class可以构造出某一个类的实例对象,前提是该class所对应的对象必须有public的构造方法,最好是无参的。

1> String str=c(1,2,3).newInstance(); // 调用的是public的 无参的 等价于 String s=new String();

2> String str=c(1,2,3).getConstruction(new Class[]{String.class}).new Instance(new Object[]{"hello"});
// 有参的构造方法, 等价于 String s=new String("hello");


3 得到某一个对象的某一个方法或全部方法
注意:每一个对象的每一个方法都对应一个Method对象

Methods ms=c(1,2,3).getDeclaredMethods(); //得到某一个类所有方法的数组

Method method = c(1,2,3).getMethod("substring",new Class[]{int.class,int.class});

//得到某一个方法 需要传递方法名,第二个参数为该方法的输入参数数 组列


4 得到某一个对象的属性,也称公共成员变量

注意:每一个对象的每一个属性都对应一个Field对象
Field[] fields=c(1,2,3).getDeclaredFields(); // 得到某一个类所有的属性

Field f = c(1,2,3).getField(“aa”); //得到某一个类的已aa命名的属性

5 方法的调用,这个是重点。

调用String的substring方法

Object obj =method.invoke(str,new Object[]{1,5}); //等价于 Object obj=(Object)str.substring(1,5);


6 Class类中getMethods()与getDeclaredMethods()的区别

getMethods()得到public属性的方法
getDeclaredMethods()得到的是所有的privete、public等全部的方法

注 getFields和getDeclaredFields方法的区别和上面的一样


今天暂且到这里。

你可能感兴趣的:(java)