java中的反射,知道類名創建類,還可以設置私有屬性的值


剛剛學到了反射,感覺反射的功能好強大,所以想寫篇博客記錄下自己的學習成果。

利用反射來創建對象。

Class c1=Class.forName("test.Person");//通過類名來創建類,這里test.person只是一個類名,。這個person類代碼在//本文最下方

/**
*情況1:調用無參的構造方法來創建對象
*/
Person p=c1.newInstance();//這樣就創建好了

/**
*情況2:調用有參構造方法
*/
Constructor cs=c1.getConstructor(String.class,int.class);//括號里面寫的是構造方法的參數類型的類化,也就是后面加.class就好了
Person p=(Person) cs.newInstance("張三",22);//調用構造方法生成對象
View Code

利用反射來設置私有屬性

    try {
    Class clazz=Class.forName("testPerson");
    Person p=(Person) clazz.newInstance();
    Field f1=clazz.getDeclaredField("name");
    f1.setAccessible(true);//設置是否可以操作私有屬性
    f1.set(p, "wfadf");
 System.out.println(f1.get(p));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        throw new RuntimeException(e);
    }

Person類代碼

package test;

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

    
    public Person() {
        
    }

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

    public String getName() {
        return name;
    }
/*
    public void setName(String name) {
        this.name = name;
    }*/

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM