反射(三) 笔记

来源:互联网 发布:淘宝app地址管理在哪 编辑:程序博客网 时间:2024/05/07 19:12

创建对象     


      以前,创建对象的方法通常都是通过new操作符调用该类的构造方法来创建的。例如,Date currentDate = new Date();
      大多数情况下,这种方式已足够满足需求。因为在编译期间,已经知道要创建的对象所对应的类名称。但是,如果现在编写一个开发工具软件,将可能直到运行时才知道要创建的对象所对应的类名称。例如,一个GUI开发工具可以让用户拖拽各种图形组件到设计界面上。

public Object create(String className){          根据类名来创建出它的对象       返回这个新创建的对象}


使用无参构造方法

                 如果要使用无参的构造方法创建对象,只需调用这个类对应的Class对象的newInstance()方法。

                                          Class c = Class.forName("java.util.ArrayList"); List list = (List) c.newInstance();
                需要注意的是:如果指定名称的类没有无参构造方法,在调用newInstance()方法时会抛出一个NoSuchMethodException异常。


 使用带参数的构造方法

 要使用带参数的构造方法来创建对象,可以分为如下3个步骤来完成。
                    第1步  获取指定类对应的Class对象。
                    第2步  通过Class对象获取满足指定参数类型要求的Constructor对象。
                    第3步  调用指定Constructor对象的newInstance方法,传入对应的参数值,创建对象。

 

调用方法

               使用反射可以取得指定类的指定方法的对象代表,方法的对象代表就是java.lang.reflect.Method类的实例,通过Method类的invoke方法可以动态调用这个方法。

                                    public Object invoke(Object obj, Object... args) throws IllegalAccessException,IllegalArgumentException, InvocationTargetException
                该方法的第一个参数是一个对象类型,表示要在指定的这个对象上调用这个方法

                                  第二个参数是一个可变参数,用来给这个方法传递参数值;
                 invoke方法的返回值用来表示动态调用指定方法后的实际返回值。

             注意:若要通过反射调用类的某个私有方法,可以在这个私有方法对应的Method对象上,先调用setAccessible(true)来取消Java语言对本方法的访问检查,然后再调用invoke方法来真正执行这个私有方法。


访问成员变量的值

            使用反射可获取类的成员变量的对象代表,成员变量的对象代表是java.lang.reflect.Field类的实例,可以使用它的getXXX方法来获取指定对象上的值,也可以调用它的setXXX方法来动态修改指定对象上的值,其中的XXX表示成员变量的数据类型。

 Properties

               Java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是“键=值”的格式,也就是说文件的每一行都是先定义一个键名,然后等于号后面是值,在properties文件中,可以用“#”来作注释,properties文件在Java编程中用到的地方很多,操作很方便。最常见的操作该类文件的方法是通过Properties类来完成。
              JDK 中的 Properties 类存在于包java.util 中,该类继承自 Hashtable ,主要方法包括:getProperty(String key):用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到key所对应的 value。
            load(InputStream  inStream) :从输入流中读取属性列表(键和元素对)。通过对指定的文件进行装载来获取该文件中的所有键-值对,以供getProperty(String key) 来搜索。
          setProperty(String  key, String  value):调用Hashtable的方法put 。来设置“键-值”对。
         store(OutputStream out, String comments):以适合使用load方法加载到Properties表中的格式,将此Properties表中的属性列表(键和元素对)写入输出流。
         clear ():清除所有装载的“键-值”对。

原创粉丝点击