1. 程式人生 > >Java反射列印類的資訊,包括類的成員函式、成員變數(只獲取成員函式)

Java反射列印類的資訊,包括類的成員函式、成員變數(只獲取成員函式)

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassUtil {
	/**
	 * 列印類的資訊,包括類的成員函式、成員變數(只獲取成員函式)
	 * @param obj 該物件所屬類的資訊
	 */
	public static void printClassMethodMessage(Object obj){
		//要獲取類的資訊  首先要獲取類的類型別
		Class c = obj.getClass();//傳遞的是哪個子類的物件  c就是該子類的類型別
		//獲取類的名稱
		System.out.println("類的名稱是:"+c.getName());
		/*
		 * Method類,方法物件
		 * 一個成員方法就是一個Method物件
		 * getMethods()方法獲取的是所有的public的函式,包括父類繼承而來的
		 * getDeclaredMethods()獲取的是所有該類自己宣告的方法,不問訪問許可權
		 */
		Method[] ms = c.getMethods();//c.getDeclaredMethods()
		for(int i = 0; i < ms.length;i++){
			//得到方法的返回值型別的類型別
			Class returnType = ms[i].getReturnType();
			System.out.print(returnType.getName()+" ");
			//得到方法的名稱
			System.out.print(ms[i].getName()+"(");
			//獲取引數型別--->得到的是引數列表的型別的類型別
			Class[] paramTypes = ms[i].getParameterTypes();
			for (Class class1 : paramTypes) {
				System.out.print(class1.getName()+",");
			}
			System.out.println(")");
		}
	}
    /**
     * 獲取成員變數的資訊
     * @param obj
     */
	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.getName();
			//得到成員變數的名稱
			String fieldName = field.getName();
			System.out.println(typeName+" "+fieldName);
		}
	}
	/**
	 * 列印物件的建構函式的資訊
	 * @param obj
	 */
	public static void printConMessage(Object obj){
		Class c = obj.getClass();
		/*
		 * 建構函式也是物件
		 * java.lang. Constructor中封裝了建構函式的資訊
		 * getConstructors獲取所有的public的建構函式
		 * getDeclaredConstructors得到所有的建構函式
		 */
		//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.println(")");
		}
	}
}
測試類1:
public class ClassDemo3 {
	public static void main(String[] args) {
		String s = "hello";
		ClassUtil.printClassMethodMessage(s);
		
	    Integer n1 = 1;
	    ClassUtil.printClassMethodMessage(n1);
	}

}
測試類2:

public class ClassDemo4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassUtil.printFieldMessage("hello");
		System.out.println("=============");
		ClassUtil.printFieldMessage(new Integer(1));

	}

}
測試類3:
public class ClassDemo5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassUtil.printConMessage("hello");
		ClassUtil.printConMessage(new Integer(1));
		

	}

}

相關推薦

Java反射列印資訊包括成員函式成員變數(獲取成員函式)

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassUtil { /** *

Java 反射封裝JDBC查詢條件查詢全部查詢封裝到一個結果為物件;

//封裝方法package com.huanyuguoji.Test;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.refl

建立一個學生(Student)包括學號成績程式設計輸入和顯示學生的資訊。建立一個人類(Person)包含姓名性別和年齡並作為學生的基

 #include<iostream.h> class Person {  char name[10];  char sex;  int age; public:  void input()  {   cout<<"請輸入姓名:";   cin>

Java原始碼分析——Object解析一切的源頭

    Java語言類的起始點源於Object類,其它類都直接或間接繼承Oject類,可以說Object類是一切類的源頭。下面來談下Object類的內部的編碼以及簡單的闡述下其中的native本地的方法。    &nb

C# DataReader反射獲取實體(model) 實體集List

public static T FillModel<T>(IDataReader dr)         {          

java中包的理解普通抽象介面作為方法引數傳值情況作為返回值的傳遞情況。

一、包的概念 用於存放類檔案,包含原始檔還有.class檔案。通過包的分類管理讓功能相同的類放在一個資料夾裡。作用:為類檔案進行分類管理。 二、包的宣告格式 通常使用公司網址反寫。包名全部採用小寫字母。多層包用.連線。包的宣告必須在有效程式碼的第一行。 導包: impo

Java中 元素的繼承屬性覆蓋父屬性的例項

子類原始碼: package jason; public class SubDemo extends BaseDemo{ public int a = 7; public void accessOwner(){ System.out.println(a);

java反射機制編寫簡單萬能DAO

由於在搭建編寫萬能DAO時,已經寫了大量的程式碼 在此只給出部分的測試原始碼 如有需要完整專案或者有任何建議聯絡973639421 package com.oman.bean; public class Person { private int id; privat

通過java反射比較兩個相同實體屬性值的差異

此方法可以通過傳入兩個實體物件,一個字串陣列(需要進行比較的實體類屬性名稱),返回兩個實體類屬性的差異public class CompareFileds { private static Logger logger = LoggerFactory.getLogger(Com

反射獲取物件中屬性的資訊包括屬性的特性

/********************************************/ 反射獲取物件的屬性資訊 Type T = obj.GetType();//其中obj為一個類的物

利用java反射機制實現javaweb自動呼叫的方法

public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequ

C#中的struct(結構)為值struct型全接觸

line 輸出 其他 重要 影響 初始化 最大 cat type類 眾所周知,struct類型和class類型非常相似,尤其是在C++中,class可以辦到的事struct幾乎都可以實現。在C#中struc類型依然存在,它的用處相對來說已經顯得越來越不重要,這裏主要講述一下

動態靜態

隱式類型轉換 用戶 sting 靜態類 算術 tin and 數據 靜態類型 “C and C++ are considered weakly typed since, due to type-casting, one can interpret a field

PYTHON-DAY6-基本數據型-元祖字典集合型-作業

hello lex split python 元祖 pytho 課程 基本數據類型 重復 # 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],# 將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的

潭州課堂25班:Ph201805201 django框架 第五課 自定義簡單標籤包含標籤模型建立梳理建立 (課堂筆記)

自定義標籤同自定義過渡器一樣,要建立檔案,在配置檔案中以APP方法註冊,對方法進註冊,在 html 檔案中引入,..  由模板傳參     在 在配置檔案中改時區: 由檢視函式傳參       &nbs

day020多繼承經典MRO新式MROC3演算法super

本節內容 1.python多繼承 2.python經典類的MRO 3.python新式類的MRO,C3演算法 4.super()是什麼 一、python多繼承 ·當出現了x是⼀種y的的時候. 就可以使⽤繼承關係. 即"is-a" 關係. ·在繼承關係中. ⼦類⾃動擁有⽗類中除了私有屬性外的其他所有內容.

微信小程式:登陸獲取使用者資訊包括維護3rdSession。(Node.js-Koa)

前兩三個月最常見的問題就是登陸模組的問題了。自己也改了好幾次登陸的問題,從普通登陸,一直改到維護3rdSession。(token) 普通登陸:使用者資料包括appid,secret全部暴露在外,相對來說不安全。 上前臺程式碼塊: wxml <button open-typ

建立和呼叫儲存過程:查詢Stu資料庫中某個同學的選修課程的資訊包括學號姓名課程名稱成績

CREATE PROCEDURE proc_select--建立儲存過程 @Sno char(10) output,--輸入輸出引數 @Sname varchar(20) out,--輸出引數 @Cno char(4) out,--輸出引數 @grade tinyint

PHP讀取APK的包資訊包括包名應用名許可權LOGO等

【轉】PHP讀取APK的包資訊,包括包名,應用名,許可權,LOGO等 宣告本文轉自: 原文連結:https://www.jb51.net/article/53780.htm; 感謝分享!   <?php //-------------------------------