91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

java項目中的字節碼文件的相關內容怎么樣獲取

發布時間:2020-11-16 16:11:23 來源:億速云 閱讀:130 作者:Leah 欄目:編程語言

這篇文章給大家介紹java項目中的字節碼文件的相關內容怎么樣獲取,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

java 中如何獲取字節碼文件的相關內容

反射機制是指在運行狀態中,對任意一個類(class文件),都能知道這個類的所有屬性和方法;對任意一個對象,都能調用這個對象的方法和屬性。這種動態的獲取信息和動態的調用對象的方法的功能稱為——Java語言的反射機制。

簡單點說,動態的獲取類中的信息,這就是Java的反射機制。

在Java的反射機制中,我們可以通過配置文件信息,然后通過類名來獲取類中包含的詳細信息,如構造函數、成員變量和成員函數等。在接下來,作者將分別演示如何通過類名來獲取類中包含的信息。

一、獲取字節碼文件的構造函數

import java.lang.reflect.Constructor;

public class GetClassConstructor {
  public static void main(String[] args) throws Exception {
    createNewObject_2();
  }

  public static void createNewObject_2() throws Exception {
    /**
     * 當獲取指定名稱對應類中的所體現的對象時,而且該對象的初始化不適用空參的構造函數
     * 可以先通過該類的字節碼文件對象,獲取空參的構造函數
     * 該方法為:getConstructor(parameterTypes)
     */

  // 包名一定要寫全,否則會報"java.lang.ClassNotFoundException"異常
  String name = "src.Person";
    // 找尋該名稱類文件,并加進內存,產生Class對象
    Class clazz = Class.forName(name);
    // 獲取指定的構造函數對象
    Constructor constructor = clazz.getConstructor(String.class, int.class);
    // 通過該構造器對象的newInstance進行對象的初始化
    constructor.newInstance("小明", 12);
  }

  public static void createNewObject() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    String name = "src.Person";
    // 找尋該名稱類文件,并加進內存,產生Class對象
    Class clazz = Class.forName(name);
    // 產生該類的實例對象(空參)
    Object obj = clazz.newInstance();
  }
}

二、獲取字節碼文件的成員變量

import java.lang.reflect.Field;

public class GetClassField {
  public static void main(String[] args) throws Exception {
    getField();
  }

  /**
   * 獲取字節碼文件中的成員變量
   */
  public static void getField() throws Exception {
    Class clazz = Class.forName("src.Person");
    Field field = null;

    // 獲取本類字段,包含私有
    field = clazz.getDeclaredField("age");

    // 對私有字段的訪問取消權限檢查,可稱之為暴力訪問
    field.setAccessible(true);

    Object obj = clazz.newInstance();

    field.set(obj, Integer.valueOf(89));

    Object o = field.get(obj);
    System.out.println(o);
  }
}

三、獲取字節碼文件的成員函數

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class GetClassMethod {
  public static void main(String[] args) throws Exception {
    getMethod_3();
  }

  public static void getMethod_3() throws Exception {
    Class clazz = Class.forName("src.Person");
    Method method = clazz.getMethod("walkInfo", new Class[]{String.class, Integer.TYPE});
    Object obj = clazz.newInstance();
    method.invoke(obj, new Object[]{"小強", Integer.valueOf(20)});
  }

  public static void getMethod_2() throws Exception {
    Class clazz = Class.forName("src.Person");

    // 獲取空參數的方法
    Method method = clazz.getMethod("show", (Class[]) null);
    Constructor constructor = clazz.getConstructor(new Class[]{String.class, Integer.TYPE});
    Object obj = constructor.newInstance(new Object[]{"小明", Integer.valueOf(12)});
    method.invoke(obj, (Object[]) null);
  }

  /**
   * 獲取指定Class中的公有函數
   */
  public static void getMethod() throws Exception {
    Class clazz = Class.forName("src.Person");

    // 獲取的都是類中的公有方法
    Method[] methods = clazz.getMethods();

    // 獲取本類中的所有方法
    methods = clazz.getDeclaredMethods();
    Method[] var5 = methods;
    int var4 = methods.length;

    for (int var3 = 0; var3 < var4; ++var3) {
      Method method = var5[var3];
      System.out.println(method);
    }
  }
}

關于java項目中的字節碼文件的相關內容怎么樣獲取就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

蓬溪县| 松桃| 屯留县| 清苑县| 永顺县| 旺苍县| 茂名市| 阿城市| 莱芜市| 商洛市| 无极县| 周至县| 时尚| 乌恰县| 灵石县| 顺义区| 朔州市| 凤冈县| 手机| 新沂市| 三明市| 孟州市| 叙永县| 房山区| 博湖县| 准格尔旗| 南宁市| 资中县| 额尔古纳市| 淮南市| 红桥区| 久治县| 驻马店市| 库伦旗| 耿马| 始兴县| 阜城县| 江北区| 驻马店市| 中江县| 建德市|