JAVA反射

反射:就是通過class文件對象,去使用該文件中的成員變量,構造方法,成員方法。
Class類:
成員變量 Field
構造方法 Constructor
成員方法 Method
獲取class文件對象的方式:
A.Object類的getClass()方法
B.數據類型的靜態屬性class
C.Class類中的靜態方法

public static Class forName(String className)//全路徑

代碼如下:

class ReflectDemo{
    public static void main(String[] args) {

            Person p = new Person();

            Class c =   p.getClass();

            Person p1 = new Person();

            Class c1 =  p1.getClass();

            System.out.println(p==p1);//false

            System.out.println(c==c1);//true



    }
}


 class Person {
    private String name;
    int age;
    public String address;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;

    }

    public void show() {
        System.out.println("show");
    }

    public void method(String s) {
        System.out.println("method" + s);

    }

    public String getString(String s, int i) {
        return s + "-----" + i;
    }
    private void function(){
        System.out.println("function");
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

通過反射獲取構造方法並使用
獲取構造方法

getConstructors
getDeclaredConstructors

創建對象

    newInstance()
    con.newInstance(“zhangsan", 20);

通過反射獲取成員變量並使用
獲取所有成員

    getFields,getDeclaredFields

獲取單個成員

    getField,getDeclaredField

修改成員的值

    set(Object obj,Object value)   
    將指定對象變量上此 Field 對象表示的字段設置爲指定的新值。

通過反射獲取成員方法並使用
獲取所有方法

    getMethods
    getDeclaredMethods

獲取單個方法

    getMethod
    getDeclaredMethod

暴力訪問

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