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...