创建对象
以前,创建对象的方法通常都是通过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 ():清除所有装载的“键-值”对。