1. 程式人生 > >Java基礎加強之反射

Java基礎加強之反射

驅動 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;
12
this.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 }
View Code

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.Student
View 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.Student
View Code

Java基礎加強之反射