1. 通過new對象實現反射機制( 對象.getClass() ) 2. 通過路徑實現反射機制( Class.forName("包名.類名") ) 3. 通過類名實現反射機制 ( 類名.Class ) class Student { private int id; String name; prot ...
1. 通過new對象實現反射機制( 對象.getClass() ) 2. 通過路徑實現反射機制( Class.forName("包名.類名") ) 3. 通過類名實現反射機制 ( 類名.Class )
class Student { private int id; String name; protected boolean sex ; pub1ic f1oat score; } pub1ic class Get { //獲取反射機制三種方式 public static void main(String[] args) throws ClassNotFoundException { //方式一(通過建立對象) Student stu = new StudentO ; Class classobj1 = stu. getClassO; System. out. print1n(classobj1. getNameO); //方式二(所在通過路徑-相對路徑) Class classobj2 = Class . forName (" fanshe . Student") ; System. out. println(classobj2. getName0) ; //方式三(通過類名) Class classobj3 = Student.class; System. out. println(classobj3. getName0) ; } }
Java 反射機制是在運行狀態中,對於任意一個類,都能夠獲得這個類的所有屬性和方法,對於任意一個對象都能夠調用它的任意一個屬性和方法。這種在運行時動態的獲取信息以及動態調用對象的方法的功能稱為 Java 的反射機制。 Class 類與 java.lang.reflflect 類庫一起對反射的概念進行了支持,該類庫包含了 Field,Method,Constructor 類 (每個類都實現了 Member 介面)。這些類型的對象時由 JVM 在運行時創建的,用以表示未知類里對應的成員。這樣你就可以使用 Constructor 創建新的對象,用 get() 和 set() 方法讀取和修改與 Field 對象關聯的欄位,用invoke() 方法調用與 Method 對象關聯的方法。另外,還可以調用 getFields() getMethods() 和getConstructors() 等很便利的方法,以返回表示欄位,方法,以及構造器的對象的數組。這樣匿名對象的信息就能在運行時被完全確定下來,而在編譯時不需要知道任何事情。 例:
import java.1ang. ref1 ect . Constructor ; public class ReflectTest { public static void main(String[] args) throws Exception { Class c1azz = nu11; clazz = Class. forName(" com. jas. reflect. Fruit"); Constructor<Fruit> constructor1 = c1azz . getConstructor() ; Constructor<Fruit> constructor2 = clazz . getConstructor(String.class) ; Fruit fruit1 = constructor1 . newInstance() ; Fruit fruit2 = constructor2 . newInstance("Apple"); class Fruit{ public Fruit(){ System. out. print1n("無參構造器Run.........."); } pub1ic Fruit(String type){ System. out. print1n("有參構造器Run.........."+type); } }運行結果: 無參構造器 Run……….. 有參構造器 Run………..Apple