中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么通過反射查看類的信息

發布時間:2021-06-25 16:39:35 來源:億速云 閱讀:129 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Java中怎么通過反射查看類的信息,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一 點睛

1 通過反射獲取Class對象

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

調用某個類的class屬性來獲取該類對應的Class對象。例如Person.class將會返回Person類對應的Class對象。

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

2 從Class中獲取信息

獲取構造器

訪問Class對應的類所包含的方法

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

訪問Class對應的類上所包含的注釋。

訪問該Class對象對應類包含的內部類。

訪問該Class對象對應類所在的外部類。

訪問該Class對象所對應類所繼承的父類、所實現的接口等。

二 實戰

1 代碼

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

2 運行

ClassTest的全部構造器如下:private ClassTest()public ClassTest(java.lang.String)ClassTest的全部public構造器如下:public ClassTest(java.lang.String)ClassTest的全部public方法如下:public static void ClassTest.main(java.lang.String[]) throws java.lang.Exceptionpublic void ClassTest.info(java.lang.String)public void ClassTest.info()public final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic 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里帶一個字符串參數的info()方法為:public void ClassTest.info(java.lang.String)ClassTest的全部Annotation如下:@java.lang.Deprecated()@Annos(value=[@Anno(), @Anno()])該Class元素上的@SuppressWarnings注解為:[]該Class元素上的@Anno注解為:[@Anno(), @Anno()]ClassTest的全部內部類如下:class ClassTest$InnerinClazz對應類的外部類為:class ClassTestClassTest的包為:nullClassTest的父類為:class java.lang.Object

看完上述內容,你們對Java中怎么通過反射查看類的信息有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南和县| 通江县| 林州市| 五寨县| 永春县| 明光市| 朝阳区| 涞源县| 苍梧县| 花垣县| 阿拉善左旗| 大关县| 瑞安市| 景东| 灵璧县| 镇江市| 丹巴县| 海兴县| 康保县| 祁门县| 九江县| 台北市| 梅河口市| 洪雅县| 日喀则市| 八宿县| 临湘市| 峨边| 彭水| 平谷区| 万载县| 盐城市| 于田县| 秭归县| 龙游县| 漾濞| 揭东县| 富裕县| 阜新| 黄山市| 湛江市|