Java反射指的是對於任何的一個java類,我們都可以透過反射獲取到這個類的所有屬性和方法(包含私有的屬性方法),使用java反射我們也可以呼叫一個物件的任何方法。
我們知道Java是一門面向物件程式設計的語言,我們程式設計的時候,經常會將類的屬性進行封裝,然後提供public方法進行屬性的設定和獲取。類的屬性我們通常會設定成private的私有屬性,為的就是保護物件屬性不被隨意地修改和訪問。但是反射機制卻恰恰相反,透過反射,我們可以獲取到這些被保護的屬性和方法,並且可以修改和訪問他們。
在java中我們可以使用object物件的getClass();方法獲得Class的物件classObject;語法格式為 Class classObject = object.getClass() ;可以根據Class物件的方法獲取object物件的相關屬性和方法;
獲取object物件的名字可以使用 classObject.getName();獲取類的名稱,獲取到的結果包含包的名稱;
獲取object物件的包名稱,可以使用classObject.getPackage();獲取包的名稱;
獲取object物件的所有public屬性,可以使用classObject.getFields();方法,返回列表是屬性類Field[]物件列表;
獲取object物件所有屬性,可以使用classObject.getDeclaredFields();方法,返回的是所有屬性列表(包含private屬性);
獲取object物件某個特定的屬性,可以使用classObject.getField( fieldName );可以根據屬性名稱獲取屬性類的物件;
獲取object物件private屬性,可以使用classObject.getDeclaredField( fieldName );根據屬性名獲取屬性物件資訊;
獲取object物件public方法,使用classObject.getMethods();可以獲取到方法類Method[]物件列表;
獲取object物件某個特定的public方法,使用classObject.getMethod( funName , Class…… parameterTypes);根據方法名和方法引數型別列表,可以獲取到方法類的物件;
獲取object物件所有方法(包含private方法);使用classObject.getDeclaredMethods();可以獲取所有的方法物件列表;
獲取object物件某個特定方法(包含private方法),使用classObject.getDeclaredMethod ( funName, Class…… parameterTypes );根據方法名和方法引數型別列表,可以獲取到類的特定方法(包含private方法);
獲取object物件類中所有的public構造方法,可以使用classObject.getConstructors(); 獲取到構造類Constructor的物件列表;
獲取object物件類中某個特定的構造方法,可以使用classObject.getConstructor( Class…… parameterTypes ); 根據引數型別列表,獲取指定的建構函式物件;
獲取object物件類中所有的構造方法(包含private),可以使用classObject.getDeclaredConstructors(); 獲取到構造類Constructor的物件列表;
獲取object物件類中某個特定的構造方法(包含private),可以使用classObject.getDeclaredConstructor( Class…… parameterTypes ); 根據引數型別列表,獲取指定的建構函式物件;
以上就是關於Java反射的基礎知識。
Java反射指的是對於任何的一個java類,我們都可以透過反射獲取到這個類的所有屬性和方法(包含私有的屬性方法),使用java反射我們也可以呼叫一個物件的任何方法。
我們知道Java是一門面向物件程式設計的語言,我們程式設計的時候,經常會將類的屬性進行封裝,然後提供public方法進行屬性的設定和獲取。類的屬性我們通常會設定成private的私有屬性,為的就是保護物件屬性不被隨意地修改和訪問。但是反射機制卻恰恰相反,透過反射,我們可以獲取到這些被保護的屬性和方法,並且可以修改和訪問他們。
在java中我們可以使用object物件的getClass();方法獲得Class的物件classObject;語法格式為 Class classObject = object.getClass() ;可以根據Class物件的方法獲取object物件的相關屬性和方法;
獲取object物件的名字可以使用 classObject.getName();獲取類的名稱,獲取到的結果包含包的名稱;
獲取object物件的包名稱,可以使用classObject.getPackage();獲取包的名稱;
獲取object物件的所有public屬性,可以使用classObject.getFields();方法,返回列表是屬性類Field[]物件列表;
獲取object物件所有屬性,可以使用classObject.getDeclaredFields();方法,返回的是所有屬性列表(包含private屬性);
獲取object物件某個特定的屬性,可以使用classObject.getField( fieldName );可以根據屬性名稱獲取屬性類的物件;
獲取object物件private屬性,可以使用classObject.getDeclaredField( fieldName );根據屬性名獲取屬性物件資訊;
獲取object物件public方法,使用classObject.getMethods();可以獲取到方法類Method[]物件列表;
獲取object物件某個特定的public方法,使用classObject.getMethod( funName , Class…… parameterTypes);根據方法名和方法引數型別列表,可以獲取到方法類的物件;
獲取object物件所有方法(包含private方法);使用classObject.getDeclaredMethods();可以獲取所有的方法物件列表;
獲取object物件某個特定方法(包含private方法),使用classObject.getDeclaredMethod ( funName, Class…… parameterTypes );根據方法名和方法引數型別列表,可以獲取到類的特定方法(包含private方法);
獲取object物件類中所有的public構造方法,可以使用classObject.getConstructors(); 獲取到構造類Constructor的物件列表;
獲取object物件類中某個特定的構造方法,可以使用classObject.getConstructor( Class…… parameterTypes ); 根據引數型別列表,獲取指定的建構函式物件;
獲取object物件類中所有的構造方法(包含private),可以使用classObject.getDeclaredConstructors(); 獲取到構造類Constructor的物件列表;
獲取object物件類中某個特定的構造方法(包含private),可以使用classObject.getDeclaredConstructor( Class…… parameterTypes ); 根據引數型別列表,獲取指定的建構函式物件;
以上就是關於Java反射的基礎知識。