JAVA反射機(jī)制是在運(yùn)行狀態(tài)中卫病,對于任意一個實(shí)體類绿满,都能夠知道這個類的所有屬性和方法色罚;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性赋除;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為java語言的反射機(jī)制阱缓。Reflection(反射)是Java被視為動態(tài)語言的關(guān)鍵,反射機(jī)制允許程序在執(zhí)行期借助于Reflection API取得任何類的內(nèi)部信息举农,并能直接操作任意對象的內(nèi)部屬性及方法荆针。Reflection中處理的是Class對象。
獲取Class對象有三種方式;
第一種對象直接調(diào)用getClass()方法
第二種通過類名獲取
第三種通過全類名獲取
Class的常用方法 航背,參考:https://blog.csdn.net/weixin_42749765/article/details/87277826
獲取類中所有公共方法和方法中的參數(shù)類型
在Class類中有g(shù)etMethods方法和getDeclaredMethods()方法喉悴,他們也是有區(qū)別的 ;
getMethods():該方法是獲取本類以及父類或者父接口中所有的公共方法(public修飾符修飾的)
getDeclaredMethods():該方法是獲取本類中的所有方法玖媚,包括私有的(private箕肃、protected、默認(rèn)以及public)的方法
通過java反射獲取類種的固定方法并運(yùn)行該方法獲取返回值今魔。
全類名的方式獲取Class對象勺像,getMethod獲取固定方法,第一個參數(shù)是方法名错森,第二個參數(shù)是方法的參數(shù)類型吟宦。返回一個Method對象,newInstance創(chuàng)建一個實(shí)例问词。invoke執(zhí)行該方法督函,第一個參數(shù)是類的實(shí)例,后面的參數(shù)則是方法傳入的參數(shù)激挪。如果是私有方法還需在調(diào)invoke時(shí)加上 method.setAccessible(true);
獲取類中變量名稱辰狡,Class類中的getDeclaredFields方法可以獲取類中的變量對象,
也可以通過FIeld對象的set和get方法賦值或取值垄分;
這只是一些java反射的一些基本方法的了解宛篇,更多的實(shí)際應(yīng)用還是需要我們?nèi)?shí)際項(xiàng)目中去應(yīng)用學(xué)習(xí)。