通过反射机制访问java对象的属性,方法,构造方法等;进而可以给属性赋值,等等
例如:
1,创建java 项目,Application 类
package android;
public class Application {
//声明两个属性
public String name;
public int version;
public void onCreate()
{
}
}
2,创建framework 类,
package android;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class framework {
/**
* @param args
*/
public static void main(String[] args) {
try {
//动态加载类
//c是对象,放的是类的信息,属性,构造方法,方法
//android框架解析manifest.xml,得到Application的包名,类名
// 通过Class.forName 获取 类的对象。
Class<Application> c = (Class<Application>) Class.forName("android.Application");
//通过对象调用getFields()获取属性, 返回值是个数组
Field[] array = c.getFields();
System.out.println(array.length);
//遍历数组,获取每一个属性的名字与类型
for (int i=0;i<array.length;i++)
{
Field field=array[i];
System.out.println(field.getName()+","+field.getType());
}
//通过getMethods()方法获取方法,
Method[] methodArray=c.getMethods();
for (int k=0;k<methodArray.length;k++)
{//获取每一个方法的名字
System.out.println(methodArray[k].getName());
}
//通过c创建对象
app=c.newInstance();
app.onCreate();
} catch (Exception e) {
// TODO: handle exception
}
}
}
1,通过字符串创建对象
父类Application
子类TApplication
Android layout
2,得到属性和方法
ThinkAndroid,中的crateTable(object.class)一样,是通过类名,创建表名,通过属性名,创建表里面的列名。
列名与类的属性名一样
3,访问私有属性,如果是私有属性,APP升级时,万一改属性名字了,就会影响自己。不要用。