首先每一個類在實例化的時候都會產生一個.class文件。而Class對象既是將.class文件讀入內存時,為它創建一個Class對象。
反射就是對Class對象進行操作。
1 package reflect.vo; 2 3 /** 4 * @author guohao 5 * java測試類Student 6 */ 7 public class Student { 8 private String name; 9 private int age; 10 private float score; 11 12 public Student() { 13 } 14 15 public String getName() { 16 return name; 17 } 18 19 public void setName(String name) { 20 this.name = name; 21 } 22 23 public int getAge() { 24 return age; 25 } 26 27 public void setAge(int age) { 28 this.age = age; 29 } 30 31 public float getScore() { 32 return score; 33 } 34 35 public void setScore(float score) { 36 this.score = score; 37 } 38 39 }
1.Object 類提供一個返回Class類對象的方法getClass()
1 package reflect.vo; 2 public class test { 3 4 public static void main(String[] args) throws Exception { 5 6 Student stu = new Student();//這一new 產生一個Student對象,一個Class對象。 7 Class cls = stu.getClass();//獲取Class對象 8 System.out.println(cls.getName()); 9 10 }
2.利用“類.class”取得
1 package reflect.vo; 2 3 public class test { 4 5 public static void main(String[] args) throws Exception { 6 Class cls = Student.class; 7 System.out.println(cls); 8 } 9 }
3.利用Class類的static方法取得 Class.forName();
1 package reflect.vo; 2 3 public class test { 4 5 public static void main(String[] args) throws Exception { 6 Class<?> cls = Class.forName("reflect.vo.Student"); 7 System.out.println(cls); 9 } 10 }
三種方式常用第三種,第一種對象都有了還要反射干什么。
第二種需要導入類的包,依賴太強,不導包就拋編譯錯誤。
一般都第三種,一個字符串可以傳入也可寫在配置文件中等多種方法。
注:最后一句話引用自 https://blog.csdn.net/sinat_38259539/article/details/71799078