首页 > 应用开发 > Java > 反射--我快要遗忘的重要知识点整理
Class初识:
Java中万物万事皆对象,同样,任何一个类也是对象,是Class类的对象。
假设有一个类Apple
1. Class c1 = Apple.class;表明每一个类都有一个静态成员变量
2. Class c2 = new Apple().getClass();
3. Class c3 = Class.forName(“com.test.Apple”);
由于一个类只可能是Class类的一个实例对象,所以c1 == c2 && c2==c3 àtrue;
动态加载类:
编译时刻加载类:就是 静态加载类,new创建对象就是静态加载类。
运行时刻加载类:就是 动态加载类。
静态加载类的缺点是:因为在编译时刻就要求所有的可能用到的类都要加载进来,所以如果程序中缺少了某一个类的话,就会导致整个程序跑不起来。
但是如果我们想要用哪个类时才加载哪个,不用时就不加载的话(即需要时才加载进来),这个就实现不了了。
例如软件升级,一些功能性的类一般采用动态加载。
基本的数据类型:
1. Class c1 = int.class;
2. Class c2 = double.class;
3. Class c3 = Double.class;
4. Class c4 = void.class;
(1) 获取类的方法信息:
//根据方法名和入参的类类型数组,获取包括从父类继承而来的所有public方法
Method amethod = c1.getMethod(“方法名”,Class[] 入参的类类型数组);
//获取包括从父类继承而来的所有public方法
Method[] methods = c1.getMethods();
//根据方法名和入参的类类型数组,获取此类自己声明的方法,public,protected ,private;
Method[] methods = c1.getDefaultMethod(String name,Class[]入参的类类型数组);
//获取此类自己声明的方法,public , protected , private;
Method[] methods = c1.getDefaultMethods();
//获取某个成员方法的传人的参数的类类型:按照方法中参数的排列顺序
Method m = Methods[1];Class[] paramTypes = m.getParameterTypes();
//获取某个成员方法的返回值类型
Method m = Methods[1];Class[] paramTypes = m.getReturnType();
(2)获取类的成员变量的信息
//成员变量也是对象
Field[] fields = c1.getFields();//获取包括从父类继承来的public的变量
Field[] fields = c1.getDefaultFields();//获取自己声明的所有变量
//获取Field对象的类类型
Field field = fields[1]; Class cField = field.getType();//例如返回int.class
(3)获取类的构造方法的信息
/**
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有public构造方法。如果该类没有公共构造方法,或者该类是一个数组类,或者该类反映一个基本类型或 void,则返回一个长度为 0 的数组。
*/
ConStructor[] constructors = c1.getConstructors();
Constructor con = constructor[1];
Class[] paramTypes = con.getParameterTypes();
反射使用专题
(1)曾经的我们是这样来调用方法的:
Apple a = new Apple();
String returnvlaue = a.getName(1);//对象调用方法
但是如今,反过来:方法本身通过对象调用自己
Method m = a.getClass().getMethod(“getName”,int.class);
String returnvlaue = (String)m.invoke(a,new Object[]{1});
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900383/viewspace-1461584/ ,如需转载,请注明出处,否则将追究法律责任。