JavaSE反射操作類

2021-08-29 00:09:26 字數 2376 閱讀 8377

1、

獲取乙個class物件

class classas = class.forname(「需要載入獲取的類的路徑」);

例如:

class classas = class.forname("club.kang.blog.web.test.testclassmy.student");
2、

將這個類物件建立出來

object object = classas.newinstance();
3、然後我們對這個物件進行操作下面是各種操作

獲取成員變數

例如:操作乙個叫name的公有屬性:

獲取當前類模板的物件

class classas = class.forname("club.kang.blog.web.test.testclassmy.student");

建立乙個classas類模板的物件,無參構造

object object = classas.newinstance();

獲取成員變數,設定變數名的名字

field field = classas.getfield("name");

獲取乙個field成員叫做name,從object中拿出來

field .get(object);

設定這個成員的name成員,值為myname

field.set(object,"myname");

獲取這個成員的變數名

field.getname()

獲取這個類的所有_公有_成員變數

field fields = classas .getfields();

迴圈遍歷他

for(field fu : fields)

訪問所有屬性

field field = classas.getdeclaredfields();

它可以載入所有的成員變數甚至可以設定私有變數,

所以一般的開發中很少用到反射一般用作開發框架等,

下面我們來設定私有變數

只需要新增乙個

field.setaccessible(true);

就可以給私有的成員設定值也是暴力破解私有的方法

下面我們來操作方法還是用那乙個類物件

method method = classas.getmethod(方法名,引數值物件類…);

引數值物件類是例如string型別的引數則是string.class

int對應int.class

這裡的返回值是方法的返回值,如果是void型別的則返回null

object object2 = method .invoke(object,引數.......);

然後我們來返回所有公有的方法

method methods = classas.getmethods();

查詢所有方法

classas.getdeclaredmethods();

私有的方法也能呼叫

method.setaccessible(true);

然後直接呼叫他

object object2 = method .invoke(object,引數.......);

剩下的基本都一樣都是在中間加上

getdeclaredfield和getdeclaredmethods()

get***xx後面操作獲取的都是所有的

也嫩返回getname等等

然後就是獲取構造方法

設定構造方法的引數格式

constructor constructor = classas.getconstructor(string.class, int.class, string.class);

將獲取到的值賦給物件

object object = constructor.newinstance("myname", 18, "男");

就設定好了

然後是查詢他的父類和介面

建立乙個新的類模板,載入他的父類類模板

class cs = classas.getsuperclass();

這是獲取他的所有介面

class inte***ces = classas.getinte***ces();

其實獲取的方法都是一樣的get***x然後是方法或者成員或者其他的set***x就是往裡面設定載入

getname就是方法名,或者介面名,或者成員名

暴力破解private私有的都是field或者方法等加上.setaccessible(true);就可以了

field.setaccessible(true);

裡面還有其他的很多東西可以慢慢了解哦

javase複習 反射

反射 當位元組碼檔案載入到記憶體時,會進行解剖建立乙個對應的class物件,把位元組碼檔案的資訊都儲存進去。通過class物件使用位元組碼物件設定物件屬性,呼叫物件方法的過程叫做反射!person p new person 110,狗娃 class clazz1 class.forname cn.i...

反射操作輔助類ReflectionUtil

反射操作輔助類 public sealed class reflectionutil private static bindingflags bindingflags bindingflags.declaredonly bindingflags.public bindingflags.nonpubl...

BLReflection 反射常用操作類

blreflection 是我自己寫的乙個關於反射操作的類,在我之前關於linq的文章有用到,希望有需要的朋友可以看看。using system using system.collections.generic using system.linq using system.text using sy...