java反射机制

来源:互联网 发布:申请淘宝卖家账号 编辑:程序博客网 时间:2024/05/12 18:16

1.Java在运行期就可以知道对象所属的类,可以构造任意类的对象,判断任意对象的属性方法,可以在运行期调用任意对象的方法。

2.动态语言:开发者社区认为:程序运行时允许改变程序结构或变量类型,这种语言成为动态语言,c++,java,c#不是动态,java虽不是动态语言、但却有Reflection,“反射。映像、倒影”

    Java可以加载一个在运行时才可以知道名称的class,获悉其完整构造,并生成对象等的能力被称为introspection(“内省、內观、反省”)与反射式两个并提的术语

3不管java中一个类有多少个对象、但这些对象只对应于同一个Class对象。

4.首先获得class对象(三种1.Demo.class2.forName(com.test.Demo)3. getClass()方法),用newInstance获得class对象的实例classType,classType调用getmethod()方法获得方法实例addMethod,

  addMethod调用invoke方法传值获得方法调用。

Class<?>classType=InvokeTester.class;

        ObjectinvokeTester=classType.newInstance();

        Method addMethod=classType.getMethod("add",new Class[]{int.class,int.class});

       Object result=addMethod.invoke(invokeTester,new Object[]{1,2});

 

一个类对应一个class对象,一个方法对应一个method对象。

可变参数一定是最后一个。所以一个方法最多一个可变参数。

5.要想使用反射,必须先

6.若想通过类的不带参数的构造方法来生成对象。两种方法:

 a)先获得class对象,通过该对象的newInstance()方法

  Class<?> clazz=String.class;

Objectobj=clazz.newInstance();

 b)先获得class对象,然后通过对应的Constructor对象,再通过该Constructor随想的newInstance()方法生成

  Class<?> clazz=Customer.class;

   Constructorcons=clazz.getConstructor(new Class[]{});

   Objectobj=cons.newinstance(new Object[]{});

Java.lang.Array类:

7.Integer.Type与Integer.Class/前者返回原生类型int、后者是返回真正的类。

Method.setAccessible(true);可以用来压制java默认的格式,使反射机制可以调用私有方法。