java反射之獲取類(lèi)的信息方法(推薦)
本文接上文“老生常談反射之Class類(lèi)的使用(必看篇)”,以編寫(xiě)一個(gè)用來(lái)獲取類(lèi)的信息(成員函數(shù)、成員變量、構(gòu)造函數(shù))的工具類(lèi)來(lái)講解"反射之獲取類(lèi)的信息"
1、獲取成員函數(shù)信息
/** * 獲取成員函數(shù)信息 * @param obj */ public static void printClassMethodMessage(Object obj){ //獲取類(lèi)的信息 獲取類(lèi)的類(lèi)類(lèi)型 Class c = obj.getClass(); //獲取類(lèi)的名稱(chēng) System.out.println("類(lèi)的名稱(chēng)是:" + c.getName()); /** * Methods類(lèi),方法對(duì)象 * 一個(gè)成員方法就是一個(gè)Method對(duì)象 * getMethods()方法是獲取所有public的函數(shù),包括父類(lèi)繼承而來(lái) * getDeclaredMethods()獲取的是所有該類(lèi)自己聲明的方法,不問(wèn)訪問(wèn)權(quán)限 */ // Method [] ms = c.getMethods(); Method [] ms = c.getDeclaredMethods(); for (Method m : ms) { //得到方法返回值的類(lèi)類(lèi)型 Class returnType = m.getReturnType(); System.out.print(returnType.getName() + " "); //得到方法名稱(chēng) System.out.print(m.getName() + "("); //獲取參數(shù)類(lèi)型(得到的是參數(shù)列表的類(lèi)型的類(lèi)類(lèi)型) Class[] paramTypes = m.getParameterTypes(); for (Class paramType : paramTypes) { System.out.print(paramType.getName()+","); } System.out.println(")"); } }
2、獲取成員變量信息
/** * 獲取成員變量信息 * @param obj */ public static void printClassFieldMessage(Object obj) { Class c = obj.getClass(); /** * 成員變量也是對(duì)象 * Field類(lèi)封裝了關(guān)于成員變量的操作 * getFields()獲取的是所有的public的成員變量信息 * getDeclaredFields()獲取的是該類(lèi)自己聲明的成員變量信息 */ // Field [] fs = c.getFields(); Field[] fs = c.getDeclaredFields(); for (Field f : fs) { //得到成員變量的類(lèi)型的類(lèi)類(lèi)型 Class fieldType = f.getType(); String typeName = fieldType.getName(); //得到成員變量的名稱(chēng) String fieldName = f.getName(); System.out.println(typeName+" "+fieldName); } }
3、獲取構(gòu)造函數(shù)信息
public static void printConMessage(Object obj){ Class c = obj.getClass(); /** * 構(gòu)造函數(shù)也是對(duì)象 * java.lang.Constructor封裝了構(gòu)造函數(shù)的信息 * getConstructors()獲取所有的public構(gòu)造函數(shù) * getDeclaredConstructors()獲取所有的構(gòu)造函數(shù) */ // Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor : cs) { System.out.print(constructor.getName()+"("); //獲取構(gòu)造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類(lèi)類(lèi)型 Class[] paramTypes = constructor.getParameterTypes(); for (Class paramType : paramTypes) { System.out.print(paramType.getName()+","); } System.out.println(")"); } }
4、工具類(lèi)代碼
package com.format.util; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 打印類(lèi)的信息,成員函數(shù)、成員變量 * Created by Format on 2017/6/3. */ public class ClassUtil { /** * 獲取成員函數(shù)信息 * @param obj */ public static void printClassMethodMessage(Object obj){ //獲取類(lèi)的信息 獲取類(lèi)的類(lèi)類(lèi)型 Class c = obj.getClass(); //獲取類(lèi)的名稱(chēng) System.out.println("類(lèi)的名稱(chēng)是:" + c.getName()); /** * Methods類(lèi),方法對(duì)象 * 一個(gè)成員方法就是一個(gè)Method對(duì)象 * getMethods()方法是獲取所有public的函數(shù),包括父類(lèi)繼承而來(lái) * getDeclaredMethods()獲取的是所有該類(lèi)自己聲明的方法,不問(wèn)訪問(wèn)權(quán)限 */ // Method [] ms = c.getMethods(); Method [] ms = c.getDeclaredMethods(); for (Method m : ms) { //得到方法返回值的類(lèi)類(lèi)型 Class returnType = m.getReturnType(); System.out.print(returnType.getName() + " "); //得到方法名稱(chēng) System.out.print(m.getName() + "("); //獲取參數(shù)類(lèi)型(得到的是參數(shù)列表的類(lèi)型的類(lèi)類(lèi)型) Class[] paramTypes = m.getParameterTypes(); for (Class paramType : paramTypes) { System.out.print(paramType.getName()+","); } System.out.println(")"); } } /** * 獲取成員變量信息 * @param obj */ public static void printClassFieldMessage(Object obj) { Class c = obj.getClass(); /** * 成員變量也是對(duì)象 * Field類(lèi)封裝了關(guān)于成員變量的操作 * getFields()獲取的是所有的public的成員變量信息 * getDeclaredFields()獲取的是該類(lèi)自己聲明的成員變量信息 */ // Field [] fs = c.getFields(); Field[] fs = c.getDeclaredFields(); for (Field f : fs) { //得到成員變量的類(lèi)型的類(lèi)類(lèi)型 Class fieldType = f.getType(); String typeName = fieldType.getName(); //得到成員變量的名稱(chēng) String fieldName = f.getName(); System.out.println(typeName+" "+fieldName); } } /** * 獲取構(gòu)造函數(shù)信息 * @param obj */ public static void printConMessage(Object obj){ Class c = obj.getClass(); /** * 構(gòu)造函數(shù)也是對(duì)象 * java.lang.Constructor封裝了構(gòu)造函數(shù)的信息 * getConstructors()獲取所有的public構(gòu)造函數(shù) * getDeclaredConstructors()獲取所有的構(gòu)造函數(shù) */ // Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor : cs) { System.out.print(constructor.getName()+"("); //獲取構(gòu)造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類(lèi)類(lèi)型 Class[] paramTypes = constructor.getParameterTypes(); for (Class paramType : paramTypes) { System.out.print(paramType.getName()+","); } System.out.println(")"); } } }
以上這篇java反射之獲取類(lèi)的信息方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java在運(yùn)行時(shí)識(shí)別類(lèi)型信息的方法詳解
- Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類(lèi)用法示例
- Java 創(chuàng)建動(dòng)態(tài)類(lèi)和查看方法列表信息的實(shí)例
- java system類(lèi)使用方法示例 獲取系統(tǒng)信息
- Java 反射獲取類(lèi)詳細(xì)信息的常用方法總結(jié)
- Java類(lèi)庫(kù)BeanUtils組件使用方法及實(shí)例詳解
- Java工具類(lèi)BeanUtils庫(kù)介紹及實(shí)例詳解
- JavaWeb BeanUtils信息類(lèi)原理詳解
相關(guān)文章
詳解Java設(shè)計(jì)模式編程中的依賴(lài)倒置原則
這篇文章主要介紹了詳解Java設(shè)計(jì)模式中的依賴(lài)倒置原則,針對(duì)面對(duì)對(duì)象編程中的抽象的運(yùn)用,需要的朋友可以參考下2016-02-02SpringBoot中Mybatis + Druid 數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程
Spring Boot 底層都是采用 SpringData 的方式進(jìn)行統(tǒng)一處理各種數(shù)據(jù)庫(kù),SpringData也是Spring中與SpringBoot、SpringCloud 等齊名的知名項(xiàng)目,下面看下SpringBoot Mybatis Druid數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程,感興趣的朋友一起看看吧2021-11-11Spring中的@ConfigurationProperties詳解
這篇文章主要介紹了Spring中的@ConfigurationProperties詳解,ConfigurationProperties注解主要用于將外部配置文件配置的屬性填充到這個(gè)Spring Bean實(shí)例中,需要的朋友可以參考下2023-09-09Spring boot實(shí)現(xiàn)應(yīng)用打包部署的示例
本篇文章主要介紹了Spring boot實(shí)現(xiàn)應(yīng)用打包部署的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Java數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)哈希表的分離鏈接法
今天給大家?guī)?lái)的是關(guān)于Java數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),文章圍繞著Java哈希表的分離鏈接法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06SpringBoot將多個(gè)文件夾進(jìn)行壓縮的兩種方法(瀏覽器下載和另存為)
Spring Boot項(xiàng)目通常不會(huì)自動(dòng)對(duì)文件夾進(jìn)行壓縮,不過(guò),在打包應(yīng)用時(shí),如果你使用了Maven或Gradle這樣的構(gòu)建工具,并且配置了相應(yīng)的插件,可以在打成jar或war包的時(shí)候?qū)⒁蕾?lài)的庫(kù)文件合并并壓縮,本文介紹了SpringBoot將多個(gè)文件夾進(jìn)行壓縮的兩種方法2024-07-07