最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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è)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

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

相關(guān)文章

  • JavaSE的類和對象你真的了解嗎

    JavaSE的類和對象你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了JavaSE的類和對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java設(shè)計模式之組合模式深入刨析

    Java設(shè)計模式之組合模式深入刨析

    組合模式,又叫部分整體模式,它創(chuàng)建了對象組的數(shù)據(jù)結(jié)構(gòu)組合模式使得用戶對單個對象和組合對象的訪問具有一致性。本文將通過示例為大家詳細(xì)介紹一下組合模式,需要的可以參考一下
    2022-05-05
  • java使用webuploader實現(xiàn)跨域上傳詳解

    java使用webuploader實現(xiàn)跨域上傳詳解

    目前初步接觸JAVA圖片上傳,用的webuploader。已經(jīng)跟后臺對接上,但是有個問題就是跨域請求,通過查找相關(guān)資料終于實現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于java使用webuploader實現(xiàn)跨域上傳的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • java元注解@Inherited的使用詳解

    java元注解@Inherited的使用詳解

    這篇文章主要介紹了java元注解@Inherited的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java?zxing實現(xiàn)生成并解析二維碼與條形碼

    Java?zxing實現(xiàn)生成并解析二維碼與條形碼

    這篇文章主要為大家詳細(xì)介紹了Java如何通過zxing實現(xiàn)生成并解析二維碼與條形碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • Java正則校驗密碼至少包含字母數(shù)字特殊符號中的2種實例代碼

    Java正則校驗密碼至少包含字母數(shù)字特殊符號中的2種實例代碼

    正則表達(dá)式驗證密碼功能在項目中經(jīng)常被使用到,但是很多朋友還是不大會使用密碼正則表達(dá)式進行驗證,下面這篇文章主要給大家介紹了關(guān)于Java正則校驗密碼至少包含字母數(shù)字特殊符號中2種的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 基于Java 生產(chǎn)者消費者模式(詳細(xì)分析)

    基于Java 生產(chǎn)者消費者模式(詳細(xì)分析)

    下面小編就為大家分享一篇基于Java 生產(chǎn)者消費者模式(詳細(xì)分析),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • hadoop運行java程序(jar包)并運行時動態(tài)指定參數(shù)

    hadoop運行java程序(jar包)并運行時動態(tài)指定參數(shù)

    這篇文章主要介紹了hadoop如何運行java程序(jar包)并運行時動態(tài)指定參數(shù),使用hadoop 運行 java jar包,Main函數(shù)一定要加上全限定類名,需要的朋友可以參考下
    2021-06-06
  • 關(guān)于Spring Boot動態(tài)權(quán)限變更問題的實現(xiàn)方案

    關(guān)于Spring Boot動態(tài)權(quán)限變更問題的實現(xiàn)方案

    這篇文章主要介紹了Spring Boot動態(tài)權(quán)限變更實現(xiàn)的整體方案使用session作為緩存,結(jié)合AOP技術(shù)進行token認(rèn)證和權(quán)限控制,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • java中MultipartFile和File最簡單的互相轉(zhuǎn)換示例

    java中MultipartFile和File最簡單的互相轉(zhuǎn)換示例

    這篇文章主要給大家介紹了關(guān)于java中MultipartFile和File最簡單的互相轉(zhuǎn)換的相關(guān)資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤上的文件,需要的朋友可以參考下
    2023-09-09

最新評論

莱州市| 莒南县| 孝感市| 阳曲县| 荔浦县| 亚东县| 辛集市| 新绛县| 乌恰县| 琼结县| 临洮县| 安国市| 泽普县| 会东县| 内乡县| 安徽省| 鄂伦春自治旗| 鄂州市| 海宁市| 德兴市| 漳平市| 巴彦县| 中西区| 镇安县| 凭祥市| 报价| 和政县| 黎川县| 米泉市| 乌兰察布市| 外汇| 五大连池市| 昂仁县| 罗城| 仁寿县| 昌江| 杨浦区| 清流县| 壤塘县| 林芝县| 镇安县|