亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

一 點(diǎn)睛

1 通過反射獲取Class對(duì)象

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

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

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

2 從Class中獲取信息

獲取構(gòu)造器

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

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

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

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

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

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

二 實(shí)戰(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個(gè)注解修飾該類
@SuppressWarnings(value = "unchecked")
@Deprecated
// 使用重復(fù)注解修飾該類
@Anno
@Anno
public class ClassTest {
  // 為該類定義一個(gè)私有的構(gòu)造器
  private ClassTest() {
  }
  // 定義一個(gè)有參數(shù)的構(gòu)造器
  public ClassTest( String name ) {
    System.out.println("執(zhí)行有參數(shù)的構(gòu)造器");
  }
  // 定義一個(gè)無參數(shù)的info方法
  public void info() {
    System.out.println("執(zhí)行無參數(shù)的info方法");
  }
  // 定義一個(gè)有參數(shù)的info方法
  public void info( String str ) {
    System.out.println("執(zhí)行有參數(shù)的info方法"
        + ",其str參數(shù)值:" + str);
  }
  // 定義一個(gè)測(cè)試用的內(nèi)部類
  class Inner {
  }
  public static void main( String[] args )
      throws Exception {
    // 下面代碼可以獲取ClassTest對(duì)應(yīng)的Class
    Class<ClassTest> clazz = ClassTest.class;
    // 獲取該Class對(duì)象所對(duì)應(yīng)類的全部構(gòu)造器
    Constructor[] ctors = clazz.getDeclaredConstructors();
    System.out.println("ClassTest的全部構(gòu)造器如下:");
    for (Constructor c : ctors) {
      System.out.println(c);
    }
    // 獲取該Class對(duì)象所對(duì)應(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對(duì)象所對(duì)應(yīng)類的全部public方法
    Method[] mtds = clazz.getMethods();
    System.out.println("ClassTest的全部public方法如下:");
    for (Method md : mtds) {
      System.out.println(md);
    }
    // 獲取該Class對(duì)象所對(duì)應(yīng)類的指定方法
    System.out.println("ClassTest里帶一個(gè)字符串參數(shù)的info()方法為:"
        + clazz.getMethod("info", String.class));
    // 獲取該Class對(duì)象所對(duì)應(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對(duì)象所對(duì)應(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對(duì)應(yīng)類的外部類為:" +
        inClazz.getDeclaringClass());
    System.out.println("ClassTest的包為:" + clazz.getPackage());
    System.out.println("ClassTest的父類為:" + clazz.getSuperclass());
  }
}

2 運(yùn)行

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里帶一個(gè)字符串參數(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對(duì)應(yīng)類的外部類為:class ClassTest
ClassTest的包為:null
ClassTest的父類為:class java.lang.Object

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

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

相關(guān)文章

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

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

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

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

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

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

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

    java獲取手機(jī)已安裝APK的簽名摘要

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

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

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

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

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

    在啟動(dòng)后臺(tái) jar包時(shí),使用指定的 application.yml操作

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

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

    本文我們通過Spring AOP和Java的自定義注解來實(shí)現(xiàn)日志的插入功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友一起看看吧
    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失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

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

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

最新評(píng)論