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

Java通過反射查看類的信息示例

 更新時間:2019年07月17日 08:40:06   作者:cakincqm  
這篇文章主要介紹了Java通過反射查看類的信息,結(jié)合實例形式詳細(xì)分析了java基于反射獲取類信息的相關(guān)原理與實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Java通過反射查看類的信息。分享給大家供大家參考,具體如下:

一 點睛

1 通過反射獲取Class對象

使用Class類的forName()靜態(tài)方法。該方法需要傳入字符串參數(shù),該字符串參數(shù)的值是某個類的全限定類名(必須添加完整包名)。

調(diào)用某個類的class屬性來獲取該類對應(yīng)的Class對象。例如Person.class將會返回Person類對應(yīng)的Class對象。

調(diào)用某個對象的getClass()方法,該方法是java.lang.Object類中的一個方法,所以所有Java對象都可以調(diào)用該方法,該方法將會返回該對象所屬類對應(yīng)的Class對象。

2 從Class中獲取信息

獲取構(gòu)造器

訪問Class對應(yīng)的類所包含的方法

訪問Class對應(yīng)的類所包含的屬性(Field)

訪問Class對應(yīng)的類上所包含的注釋。

訪問該Class對象對應(yīng)類包含的內(nèi)部類。

訪問該Class對象對應(yīng)類所在的外部類。

訪問該Class對象所對應(yīng)類所繼承的父類、所實現(xiàn)的接口等。

二 實戰(zhàn)

1 代碼

import java.util.*;
import java.lang.reflect.*;
import java.lang.annotation.*;
// 定義可重復(fù)注解
@Repeatable(Annos.class)
@interface Anno {
}
@Retention(value = RetentionPolicy.RUNTIME)
@interface Annos {
  Anno[] value();
}
// 使用4個注解修飾該類
@SuppressWarnings(value = "unchecked")
@Deprecated
// 使用重復(fù)注解修飾該類
@Anno
@Anno
public class ClassTest {
  // 為該類定義一個私有的構(gòu)造器
  private ClassTest() {
  }
  // 定義一個有參數(shù)的構(gòu)造器
  public ClassTest( String name ) {
    System.out.println("執(zhí)行有參數(shù)的構(gòu)造器");
  }
  // 定義一個無參數(shù)的info方法
  public void info() {
    System.out.println("執(zhí)行無參數(shù)的info方法");
  }
  // 定義一個有參數(shù)的info方法
  public void info( String str ) {
    System.out.println("執(zhí)行有參數(shù)的info方法"
        + ",其str參數(shù)值:" + str);
  }
  // 定義一個測試用的內(nèi)部類
  class Inner {
  }
  public static void main( String[] args )
      throws Exception {
    // 下面代碼可以獲取ClassTest對應(yīng)的Class
    Class<ClassTest> clazz = ClassTest.class;
    // 獲取該Class對象所對應(yīng)類的全部構(gòu)造器
    Constructor[] ctors = clazz.getDeclaredConstructors();
    System.out.println("ClassTest的全部構(gòu)造器如下:");
    for (Constructor c : ctors) {
      System.out.println(c);
    }
    // 獲取該Class對象所對應(yīng)類的全部public構(gòu)造器
    Constructor[] publicCtors = clazz.getConstructors();
    System.out.println("ClassTest的全部public構(gòu)造器如下:");
    for (Constructor c : publicCtors) {
      System.out.println(c);
    }
    // 獲取該Class對象所對應(yīng)類的全部public方法
    Method[] mtds = clazz.getMethods();
    System.out.println("ClassTest的全部public方法如下:");
    for (Method md : mtds) {
      System.out.println(md);
    }
    // 獲取該Class對象所對應(yīng)類的指定方法
    System.out.println("ClassTest里帶一個字符串參數(shù)的info()方法為:"
        + clazz.getMethod("info", String.class));
    // 獲取該Class對象所對應(yīng)類的上的全部注解
    Annotation[] anns = clazz.getAnnotations();
    System.out.println("ClassTest的全部Annotation如下:");
    for (Annotation an : anns) {
      System.out.println(an);
    }
    System.out.println("該Class元素上的@SuppressWarnings注解為:"
        + Arrays.toString(clazz.getAnnotationsByType(SuppressWarnings.class)));
    System.out.println("該Class元素上的@Anno注解為:"
        + Arrays.toString(clazz.getAnnotationsByType(Anno.class)));
    // 獲取該Class對象所對應(yīng)類的全部內(nèi)部類
    Class<?>[] inners = clazz.getDeclaredClasses();
    System.out.println("ClassTest的全部內(nèi)部類如下:");
    for (Class c : inners) {
      System.out.println(c);
    }
    // 使用Class.forName方法加載ClassTest的Inner內(nèi)部類
    Class inClazz = Class.forName("ClassTest$Inner");
    // 通過getDeclaringClass()訪問該類所在的外部類
    System.out.println("inClazz對應(yīng)類的外部類為:" +
        inClazz.getDeclaringClass());
    System.out.println("ClassTest的包為:" + clazz.getPackage());
    System.out.println("ClassTest的父類為:" + clazz.getSuperclass());
  }
}

2 運行

ClassTest的全部構(gòu)造器如下:
private ClassTest()
public ClassTest(java.lang.String)
ClassTest的全部public構(gòu)造器如下:
public ClassTest(java.lang.String)
ClassTest的全部public方法如下:
public static void ClassTest.main(java.lang.String[]) throws java.lang.Exception
public void ClassTest.info(java.lang.String)
public void ClassTest.info()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
ClassTest里帶一個字符串參數(shù)的info()方法為:public void ClassTest.info(java.lang.String)
ClassTest的全部Annotation如下:
@java.lang.Deprecated()
@Annos(value=[@Anno(), @Anno()])
該Class元素上的@SuppressWarnings注解為:[]
該Class元素上的@Anno注解為:[@Anno(), @Anno()]
ClassTest的全部內(nèi)部類如下:
class ClassTest$Inner
inClazz對應(yīng)類的外部類為:class ClassTest
ClassTest的包為:null
ClassTest的父類為:class java.lang.Object

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • springboot?Long?精度丟失問題解決

    springboot?Long?精度丟失問題解決

    這篇文章主要為大家介紹了解決springboot?Long?精度丟失問題的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Mybatis基于MapperScan注解的動態(tài)代理加載機制詳解

    Mybatis基于MapperScan注解的動態(tài)代理加載機制詳解

    這篇文章主要介紹了Mybatis基于MapperScan注解的動態(tài)代理加載機制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 淺析Java中接口和抽象類的七大區(qū)別

    淺析Java中接口和抽象類的七大區(qū)別

    Java 是一門面向?qū)ο蟮木幊陶Z言,面向?qū)ο蟮木幊陶Z言有四大特征:抽象、封裝、繼承和多態(tài)。本文介紹的接口和抽象類就是面向?qū)ο缶幊讨小俺橄蟆钡木唧w實現(xiàn)。本文也將為大家詳細(xì)講一下二者的區(qū)別,需要的可以參考一下
    2021-12-12
  • java獲取手機已安裝APK的簽名摘要

    java獲取手機已安裝APK的簽名摘要

    這篇文章主要介紹了java獲取手機已安裝APK的簽名摘要的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java實現(xiàn)冒泡排序示例介紹

    Java實現(xiàn)冒泡排序示例介紹

    冒泡排序是一種簡單的排序算法,通過不斷比較相鄰兩個元素的大小,將較大的元素向后移動,最終將最大的元素放到了數(shù)組的末尾。Java中的實現(xiàn)方式是通過嵌套兩層循環(huán),外層循環(huán)控制比較的次數(shù),內(nèi)層循環(huán)控制每次比較時相鄰元素的比較和交換
    2023-04-04
  • SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼

    SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼

    隨著技術(shù)的發(fā)展,分布式web應(yīng)用的普及,通過session管理用戶登錄狀態(tài)成本越來越高,因此慢慢發(fā)展成為token的方式做登錄身份校驗,本文就來介紹一下SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼,感興趣的可以了解一下
    2023-12-12
  • 在啟動后臺 jar包時,使用指定的 application.yml操作

    在啟動后臺 jar包時,使用指定的 application.yml操作

    這篇文章主要介紹了在啟動后臺 jar包時,使用指定的 application.yml操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring AOP + 注解實現(xiàn)統(tǒng)一注解功能

    Spring AOP + 注解實現(xiàn)統(tǒng)一注解功能

    本文我們通過Spring AOP和Java的自定義注解來實現(xiàn)日志的插入功能,非常不錯,具有一定的參考借鑒價值,需要的朋友一起看看吧
    2018-05-05
  • java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案

    java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案

    這篇文章主要介紹了java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論