Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)
直接看程式碼
- package practive.Reflect;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- /**
- * 獲得類的資訊(成員方法,成員變數,構造方法)
- * @Author: 言曌
- * @Date: 2017/11/16
- * @Time: 下午10:06
- */
- public class ClassUtil {
- public static void printMrthodMessage(Object obj) {
- //獲取類的資訊,首先要獲取類的類型別
- Class c = obj.getClass();//傳遞是哪個子類的物件,c 就是該子類的類型別
- //獲取類的名稱
- System.out.println("類的名稱:"+c.getName());
- /**
- * Method類,方法物件
- * 一個成員方法是一個Method物件
- * getMethods()方法獲取的是所有public的函式,包括繼承而來的
- * getDeclaredMethods()獲取的是所有該類的宣告的方法,不問訪問許可權
- */
- Method[] ms = c.getMethods();
- for(int i=0;i<ms.length;i++) {
- //獲得方法的返回值型別的類型別
- Class returnType = ms[i].getReturnType();
- System.out.print(returnType+" ");
- //得到方法名
- System.out.print(ms[i].getName()+"(");
- //獲得引數型別-->得到的是引數列表的型別的類型別
- Class[] paramTypes = ms[i].getParameterTypes();
- for(Class class1 : paramTypes) {
- System.out.print(class1.getName()+",");
- }
- System.out.print(")");
- System.out.println();
- }
- }
- public static void printFieldMessage(Object obj) {
- Class c = obj.getClass();
- /**
- * 成員變數也是物件
- * java.lang.reflect.Field
- * Field類封裝了關於成員變數的操作
- * getFields()方法獲取的是所有的public的成員變數的資訊
- * getDeclaredFields()獲取的是該類自己宣告的成員變數的資訊
- */
- //Field[] fs = c.getFields();
- Field[] fs = c.getDeclaredFields();
- for(Field field : fs) {
- //得到成員變數的型別的類型別
- Class fieldType = field.getType();
- String typeName = fieldType.getTypeName();
- //獲得成員變數的名稱
- String fieldName = field.getName();
- System.out.println(typeName+" "+fieldName);
- }
- }
- public static void printConMessage(Object obj) {
- Class c = obj.getClass();
- /**
- * 建構函式也是物件
- * java.lang.Constructor中封裝了建構函式的資訊
- * getConstructors獲取所有的public的建構函式
- * getDeclaredConstuctors()得到所有的建構函式
- */
- //Constructor[] cs = c.getConstructors();
- Constructor[] cs = c.getDeclaredConstructors();
- for(Constructor constructor:cs) {
- System.out.print(constructor.getName()+"(");
- //獲取建構函式的引數列表-->得到的是引數列表的類型別
- Class[] paramTypes = constructor.getParameterTypes();
- for(Class class1:paramTypes) {
- System.out.print(class1.getName()+",");
- }
- System.out.print(")");
- System.out.println();
- }
- }
- }
然後寫一個類來測試
- package practive.Reflect;
- /**
- * @Author: 言曌
- * @Date: 2017/11/16
- * @Time: 下午10:30
- */
- public class ClassDemo2 {
- public static void main(String args[]) {
- ClassUtil.printMethodMessage("hello");
- ClassUtil.printMethodMessage(new Integer(1));
- //ClassUtil.printFieldMessage("hello");
- ClassUtil.printFieldMessage(new Integer(1));
- //ClassUtil.printConMessage("hello");
- ClassUtil.printConMessage(new Integer(1));
- }
- }
相關文章
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- JAVA之反射學習3-反射獲取成員變數並賦值Java反射變數賦值
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- 成員變數變數
- 類成員變數的初始化變數
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數
- 子父類中成員變數變數
- Java基礎02 方法與資料成員Java
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- 在Python中將字典轉為成員變數的方法Python變數
- 類的靜態成員變數和普通成員變數該怎樣去區別定義變數
- ArrayList的常用成員方法
- Java bean 鏈式獲取成員變數無需判空的工具設計JavaBean變數
- PHP --反射 --獲取類的方法PHP反射
- JAVA之反射學習2-獲取構造方法並使用Java反射構造方法
- Java入門系列-12-成員方法Java
- 類的成員變數的初始化順序變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- iOS 通過runtime獲取某個類中所有的變數和方法iOS變數
- java學習筆記day07 成員變數與區域性變數、形式引數、匿名物件、封裝、private、this、構造方法、類詳細講解、staticJava筆記變數物件封裝構造方法
- 12 ### 各種成員變數變數
- 通過反射獲取上傳檔案方法引數中的檔名反射
- win10怎麼變成超級管理員 win10獲得超級管理員的方法Win10
- C++類的靜態成員變數初始化C++變數
- 成員變數和區域性變數變數
- 已知結構體成員地址獲取結構體首地址結構體
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- C++類中的常成員和靜態成員C++
- 【python】類的特殊成員Python
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- Java之private關鍵字修飾成員變數Java變數
- 通過反射獲取私有內部類物件反射物件
- 12-成員變數的初始化變數
- MFC之動態呼叫自己寫的類庫中的類的成員方法
- Java知識點總結(反射-獲取類的資訊)Java反射
- c++成員變數初始化C++變數
- python實現獲取成員所在的多個位置Python