反射就是把Java类中的各种成分映射成相应的java类,
一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示
构造方法的反射:
Constructor类代表某个类中的一个构造方法
一个类有多个构造方法,用它们的参数列表的不同,来区分清楚
参数类型也需要用Class实例对象
得到某个类的所有的构造方法:
Constructor constructor[] =Class.forName("java.lang.String").getConstructor();
得到某一个构造方法:
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
通过构造方法创建实例对象:
String str =(String)constructor.newInstance(new StringBuffer("abc"))
成员变量的反射:
Field类代表类中的一个成员变量
Fidld f=对象.getClass().getField("变量名")
f不是对象身上的变量,而是类上,要用它去取某个对象上对应的值.
f.get(对象);
成员方法的反射:
Methodlei代表某个类中的一个成员方法.
得到类中的某一个成员方法
Method charAt =Class.forName("java.lang.String").getMethod("charAt",int.class)
调用方法
charAt.invoke(str,1);
数组的反射:
具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象.
代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class.
基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用,非基本类型的一位数组,既可以当做Object类型使用,又可以当做Object[]类型使用.
Arrays.asList()处理int[]时,是将int[]的内存地址放进去
Arrays.asList()处理String[]时,将字符串放入
类加载器加载配置文件
主类名.class.getClassLoader().gerRseourceAsStream(配置文件名);
配置文件需要和.class文件放在同一个文件夹下