java中的反射(一)
? ? 在java中反射是指在運行期動態的獲取類型的信息,比如接口的信息,類的方法和成員變量。反射的入口是Class類下面我們來一起了解一下這個Class類。
? ? 在java中每個已加載的類都有一個類信息,每個對象都一個指向它所屬類信息的引用,其中類信息對應的類就是Class類(java.lang.Class)。在Object類中有一個泛型方法:getClass()方法可以獲取對象的Class對象。但是獲取Class對象的方法并不是只能通過對應的對象獲取,可以直接使用類名.class的方法獲取Class對象并且這種獲取手段同樣適用于接口和基本數據類型。Class還有一個靜態方法forName(類名)根據類名直接加載Class獲取Class對象。對于同一個類,使用這三種方式獲取的Class對象是相同的。
? ?1.名稱信息
? ? 通過Class對象我們可以獲取java類的很多的信息。我們可以通過Class對象獲取java類的名稱信息。其中常見的幾個方法為:getName()、getSimpleName()、getPackage()其中getName()返回的是Java類的全限定名,getSimpleName()獲取的是java的類名(不含包名),getPackage()返回的是java的包名。
? ? 2.字段信息
? ? 在類中定義的靜態變量和實例變量都統稱叫做字段,使用類Field表示。使用Class對象可以獲取java類中的字段對象,在Class中提拱了方法:getFields()、getDeclareFields()、getFiled(String name)、getDeclareField(String name)來獲取Filed對象,其中getFileds()表示返回所有的public字段包括父類的,getDeclareFields()表示返回本類中聲明的字段,不包含父類中聲明的字段,getField(String name)表示獲取父類或子類中聲明的public的字段,getDeclareField(String name)表示獲取在本類中聲明的字段包含非public的字段。
? ? Field對象中也定義了許多的方法來獲取字段的信息。其中有:getName(),isAccessible(),setAccessible(boolean flag),get(Object obj),set(Object obj,Object value)。其中getName()方法表示獲取字段的名稱,isAccessible()方法是用來判斷當前的程序是否有訪問當前字段的權限,setAccessible(boolean flag)當把flag的值設置為true時表示忽略java的安全檢查機制,允許訪問非public的字段,get(Object obj)表示獲取指定對象的該字段的值,set(Object obj,Object value)表示設置指定對象的該字段的值,這里需要注意如果是靜態變量那么參數obj就可以傳null。
? ? 3.方法信息
? ? 類中定義的靜態方法和實例方法都可以用類Method表示,在Class中提供了getMethods()、getDeclaredMethods()、getMethod(String name,Class<?> ...parameterTypes)和getDeclaredMethod(String name,Class<?> ...parameterTypes)來獲取method的對象,他們方法的名字和filed命名比較的相似,含義也是大同小異。這里需要說一下的是參數paramterType表示的調用方法需要傳遞的參數。
? ? 在獲取Method對象后這個Method對象也有一下方法:getName()、setAccessible(boolean flag)、invoke(Object obj,Object ... args)。這里我只介紹最后的這個方法invoke,這個方法需要倆個參數,其中obj為指定的對象,args為傳遞的參數列表,當方法是靜態方法是obj傳null即可。
? ??
轉載于:https://www.cnblogs.com/suyang-java/p/10805030.html
總結
以上是生活随笔為你收集整理的java中的反射(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票实时行情数据大全
- 下一篇: 二进制安装Mariadb