ITPub博客

首页 > 应用开发 > Java > 反射--我快要遗忘的重要知识点整理

反射--我快要遗忘的重要知识点整理

原创 Java 作者:eBusinessMan 时间:2015-03-16 15:35:57 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    46
  • 访问量
    134908