通過反射機制訪問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升級時,萬一改屬性名字了,就會影響自己。不要用。