---------------------- android培训、java培训、期待与您交流! ----------------------
终于可以发博文了,将近几天学习的东西整理一下。为以后再来复习整理些资料吧。
A .反射的书写思路
1.class->constructor-> new object反射调用构造方法是
Constructor cons=String.class.getConstructor(StringBuffer.class);
a.要给constructor传递参数类型
String str2=(String)cons.newInstance(new StringBuffer("abc"));
b.使用这个构造参数时,参数也要传递相应的参数类型对象
c. 调用获得的方法时要用到上面相同类型的实例对象
B.反射方法的调用
Method methodcharat=String.class.getMethod("charAt",int.class);methodcharat.invoke(调用的对象,调用方法的要用的参数)
methodcharat.invoke(null,参数)
由于静态方法的调用不需要对象,所以用了null来代替。即如果传递给method对象的invoke()方法的第一个参数是null,这就意味着该Method对象调用的是一个静态方法。
C.成员变量的反射
Field field =pt1.getClass().getField("变量的名字");filed不是对象身上的变量,而是类上的,要用它去取某个对象对应的值
field.get(对象名);
注意:
getfield ( ) 方法只能得到public的成员
而getDeclaredField()可以得到任意的类型的变量,而私用变量还是不能使用。所以要用field.setAccessible(true);让他变得可用。Field[ ] field=obj.getClass( ).getFields();
for(Field fi:field)
{
if(fi.getType()==String.class)
{
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b','a');
field.set(obj,newValue);
}
}
D.为什么要用反射去调用
调用另一个类中main()方法
String startingClassName=args[0];
Method mainMethod=Class.forName("startingClassName").getMethod("main",String [].class)
mainMethod.invoke(null,new String[]{"123","234"});
注意 :
类加载器不仅可以加载类,还可以加载文件
Java要运行是要传递类的名字;
Java 要调用的完整的类的名子应为上面用到arg[0]
还有在传递参数给main方法时有一次拆包的过程!
所以有两种解决方法
a.再加一次包 new object[]{new String[]{"123","234"}};
b.告诉编译器这是一个object数组不要拆包
(object)new String[]{"123","234"};
基本的八种类型。。。int []当作object类型
数组的反射应用
import java.lang.reflect.Array;
public class printObject {
public static void printObject(Object ob)
{
Class clazz=ob.getClass();
if(clazz.isArray())
{
int len=Array.getLength(ob);
for(int i = 0;i<len;i++)
{
System.out.println(Array.get(ob, i));
}
}else{
System.out.println(ob);
}
}
}
配置文件config.properties的应用
FileInputStream ips=new FileInputStream("config.properties");
Properties props=new Properties();
props.load(ips);
ips.close();
String classname=props.getProperty("classname");
Collection collect=(Collection)Class.forName(classname).newInstance();
---------------------- android培训、java培训、期待与您交流! ----------------------