import cn.qujianlei.domain.Person; public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { /* * * 反射技術:動態的獲取類以及類中的成員,並可以調用該類的成員。 * 以前有什么類就new什么對象。 * 現在沒有類,給什么類就new什么對象。 * * * 反射技術的出現提高了程序的擴展性 * 反射技術中最重要的一點:先獲取到那個類。 * 如何獲取類呢? * * 無論new什么對象,都需要先獲取字節碼文件 * 如何獲取呢?發現java已對字節碼文件進行了描述用Class類完成的 * * 如何獲取一個字節碼文件的對象呢? * * 方式一:Object getClass()方法,發現在反射技術里,該方法不合適,反射技術中不明確具體類 * * 方式二:所有的數據類型都由自己對應的class對象,表示方法很簡單 * 每一個數據類型都由一個默認的靜態屬性。.class用該屬性就可以獲取到字節碼文件對象 * 雖然不用對象調用,但還是要用具體的類調用靜態屬性。 * * 方式三:在Class類中找到了forName方法,通過名稱就可以獲取對應的字節碼文件對象 * 重點!!!!! * */ // methodDemo_1(); // methodDemo_2(); methodDemo_3(); } public static void methodDemo_3() throws ClassNotFoundException { String className = "cn.qujianlei.domain.Person"; Class clazz = Class.forName(className); System.out.println(clazz); } public static void methodDemo_2() { Class clazz = Person.class; Class clazz2 = Person.class; System.out.println(clazz==clazz2); } //獲取Class對象的方式一 public static void methodDemo_1(){ //調用getClass先有對象 Person p1 = new Person(); Class c1 = p1.getClass(); Person p2 = new Person(); Class c2 = p2.getClass(); System.out.println(c1==c2); } }
public class Person { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); System.out.println("person run"); } public void show(){ System.out.println("person show run"); } public static void staticShow(){ System.out.println("person static show run"); } public void paramShow(String name,int age){ System.out.println("show:"+name+"---"+age); } }
