通過反射機制獲得某個類中的屬性,構造方法,方法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章