Java基礎加強之反射
阿新 • • 發佈:2018-03-02
驅動 pri tostring reflect get api tcl 所有 hide
1.什麽是反射?
反射其實就是動態的加載類,我們在寫JDBC的時候加載驅動Class.forName("xxx")時就涉及到了反射。
反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
2.反射機制能做什麽?
1. 在運行時判斷任意一個對象的所屬的類Class。
2. 在運行時判斷構造任意一個類的對象Constructor。
3. 在運行時判斷任意一個類所具有的成員變量Field和方法Method。
4. 在運行時調用任意一個對象的方法。method.invoke(object,args)
3.反射機制相關的API
獲得完整的包名和類名
Student.java
1 package com.reflect.test; 2 3 public class Student { 4 private int id; 5 private String name; 6 7 public Student() {} 8 9 public Student(int id, String name) { 10 super(); 11 this.id = id; 12View Codethis.name = name; 13 } 14 15 public int getId() { 16 return id; 17 } 18 19 public void setId(int id) { 20 this.id = id; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) {28 this.name = name; 29 } 30 31 @Override 32 public String toString() { 33 return "Student [id=" + id + ", name=" + name + "]"; 34 } 35 36 37 38 39 }
Test.java
package com.reflect.test; public class Test { Student stu = new Student(); public static void main(String[] args) { Test test = new Test(); test.getClassName(); } //獲得完整的包名和類名 public void getClassName() { System.out.println(stu.getClass().getName()); } }
運行結果
com.reflect.test.StudentView Code
獲取Class的三種方法
public static void main(String[] args) { Test test = new Test(); test.getStudentClass(); } //獲取Class對象的三種犯法 public void getStudentClass() { //第一種方法,forName Class<?> class1; try { class1 = Class.forName("com.reflect.test.Student"); System.out.println("class1:"+class1); } catch (ClassNotFoundException e) { e.printStackTrace(); } //第二種方法,class Class<?> class2 = Student.class; System.out.println("class2:"+class2); //第三種方法,getClass() Student stu1 = new Student(); Class<?> class3 = stu1.getClass(); System.out.println("class3:"+class3); }
運行結果
class1:class com.reflect.test.Student class2:class com.reflect.test.Student class3:class com.reflect.test.StudentView Code
Java基礎加強之反射