欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java反射之獲取類(lèi)的信息方法(推薦)

 更新時(shí)間:2017年06月05日 08:11:00   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇java反射之獲取類(lèi)的信息方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java設(shè)計(jì)模式編程中的依賴(lài)倒置原則

    詳解Java設(shè)計(jì)模式編程中的依賴(lài)倒置原則

    這篇文章主要介紹了詳解Java設(shè)計(jì)模式中的依賴(lài)倒置原則,針對(duì)面對(duì)對(duì)象編程中的抽象的運(yùn)用,需要的朋友可以參考下
    2016-02-02
  • JMETER用戶(hù)變量作用域測(cè)試流程

    JMETER用戶(hù)變量作用域測(cè)試流程

    這篇文章主要介紹了JMETER用戶(hù)變量作用域測(cè)試流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot中Mybatis + Druid 數(shù)據(jù)訪問(wèn)的詳細(xì)過(guò)程

    SpringBoot中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-11
  • Spring中的@ConfigurationProperties詳解

    Spring中的@ConfigurationProperties詳解

    這篇文章主要介紹了Spring中的@ConfigurationProperties詳解,ConfigurationProperties注解主要用于將外部配置文件配置的屬性填充到這個(gè)Spring Bean實(shí)例中,需要的朋友可以參考下
    2023-09-09
  • Spring boot實(shí)現(xiàn)應(yīng)用打包部署的示例

    Spring boot實(shí)現(xiàn)應(yīng)用打包部署的示例

    本篇文章主要介紹了Spring boot實(shí)現(xiàn)應(yīng)用打包部署的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • springmvc實(shí)現(xiàn)文件上傳功能

    springmvc實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了springmvc實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)哈希表的分離鏈接法

    Java數(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-06
  • Java多線程中的Future類(lèi)詳細(xì)解讀

    Java多線程中的Future類(lèi)詳細(xì)解讀

    這篇文章主要介紹了Java多線程中的Future類(lèi)詳細(xì)解讀,Future表示一個(gè)可能還沒(méi)有完成的異步任務(wù)的結(jié)果,針對(duì)這個(gè)結(jié)果可以添加Callback以便在任務(wù)執(zhí)行成功或失敗后作出相應(yīng)的操作,需要的朋友可以參考下
    2023-11-11
  • Java的RTTI和反射機(jī)制代碼分析

    Java的RTTI和反射機(jī)制代碼分析

    這篇文章主要涉及了Java的RTTI和反射機(jī)制代碼分析的相關(guān)內(nèi)容,在介紹運(yùn)行時(shí)類(lèi)型識(shí)別的同時(shí),又向大家展示了其實(shí)例以及什么時(shí)候會(huì)用到反射機(jī)制,內(nèi)容豐富,需要的朋友可以參考下。
    2017-09-09
  • SpringBoot將多個(gè)文件夾進(jìn)行壓縮的兩種方法(瀏覽器下載和另存為)

    SpringBoot將多個(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

最新評(píng)論