一、什麼是JAVA反射技術?
java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為Java語言的反射機制。
二、反射一般在哪方便有運用?
有些時候,我們用過一些知識,但是並不知道它的專業術語是什麼,在剛剛學jdbc時用過一行程式碼,
Class.forName(“com.mysql.jdbc.Driver.class”).newInstance();但是那時候只知道那行程式碼是生成
驅動物件例項,並不知道它的具體含義。聽了反射機制這節課後,才知道,原來這就是反射,現在很多開
框架都用到反射機制,hibernate、struts都是用反射機制實現的。
三、Java反射API
反射API用來生成JVM中的類、介面或則物件的資訊。
– Class類:反射的核心類,可以獲取類的屬性,方法等資訊。
– Field類:Java.lang.reflec包中的類,表示類的成員變數,可以用來獲取和設定類之中的屬性值。
– Method類: Java.lang.reflec包中的類,表示類的方法,它可以用來獲取類中的方法資訊或者執行方法。
– Constructor類: Java.lang.reflec包中的類,表示類的構造方法。
四、使用反射的步驟
- 獲取想要操作的類的Class物件
- 呼叫Class類中的方法
- 使用反射API來操作這些資訊
五、程式碼示例
package org.java.base.reflection;
public class Person {
private String name;
private String gender;
private int age;
public Person() {
}
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
//getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "姓名:"+name+" 性別:"+gender+" 年齡:"+age;
}
}複製程式碼
package org.java.base.reflection;
public class Person {
private String name;
private String gender;
private int age;
public Person() {
}
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
//getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "姓名:"+name+" 性別:"+gender+" 年齡:"+age;
}
}複製程式碼
輸出結果
方法:public java.lang.String org.java.base.reflection.Person.toString()
方法:public java.lang.String org.java.base.reflection.Person.getName()
方法:public void org.java.base.reflection.Person.setName(java.lang.String)
方法:public void org.java.base.reflection.Person.setGender(java.lang.String)
方法:public int org.java.base.reflection.Person.getAge()
方法:public void org.java.base.reflection.Person.setAge(int)
方法:public java.lang.String org.java.base.reflection.Person.getGender()
屬性:private java.lang.String org.java.base.reflection.Person.name
屬性:private java.lang.String org.java.base.reflection.Person.gender
屬性:private int org.java.base.reflection.Person.age
構造方法:public org.java.base.reflection.Person()
構造方法:public org.java.base.reflection.Person(java.lang.String,java.lang.String,int)