国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

2020-09-07 08:59Java之家 Java教程

這篇文章主要介紹了java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容的相關(guān)資料,需要的朋友可以參考下

java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

反射機(jī)制是指在運(yùn)行狀態(tài)中,對(duì)任意一個(gè)類(lèi)(class文件),都能知道這個(gè)類(lèi)的所有屬性和方法;對(duì)任意一個(gè)對(duì)象,都能調(diào)用這個(gè)對(duì)象的方法和屬性。這種動(dòng)態(tài)的獲取信息和動(dòng)態(tài)的調(diào)用對(duì)象的方法的功能稱為——Java語(yǔ)言的反射機(jī)制。

簡(jiǎn)單點(diǎn)說(shuō),動(dòng)態(tài)的獲取類(lèi)中的信息,這就是Java的反射機(jī)制。

在Java的反射機(jī)制中,我們可以通過(guò)配置文件信息,然后通過(guò)類(lèi)名來(lái)獲取類(lèi)中包含的詳細(xì)信息,如構(gòu)造函數(shù)、成員變量和成員函數(shù)等。在接下來(lái),作者將分別演示如何通過(guò)類(lèi)名來(lái)獲取類(lèi)中包含的信息。

一、獲取字節(jié)碼文件的構(gòu)造函數(shù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 {
    /**
     * 當(dāng)獲取指定名稱對(duì)應(yīng)類(lèi)中的所體現(xiàn)的對(duì)象時(shí),而且該對(duì)象的初始化不適用空參的構(gòu)造函數(shù)
     * 可以先通過(guò)該類(lèi)的字節(jié)碼文件對(duì)象,獲取空參的構(gòu)造函數(shù)
     * 該方法為:getConstructor(parameterTypes)
     */
 
  // 包名一定要寫(xiě)全,否則會(huì)報(bào)"java.lang.ClassNotFoundException"異常
  String name = "src.Person";
    // 找尋該名稱類(lèi)文件,并加進(jìn)內(nèi)存,產(chǎn)生Class對(duì)象
    Class clazz = Class.forName(name);
    // 獲取指定的構(gòu)造函數(shù)對(duì)象
    Constructor constructor = clazz.getConstructor(String.class, int.class);
    // 通過(guò)該構(gòu)造器對(duì)象的newInstance進(jìn)行對(duì)象的初始化
    constructor.newInstance("小明", 12);
  }
 
  public static void createNewObject() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    String name = "src.Person";
    // 找尋該名稱類(lèi)文件,并加進(jìn)內(nèi)存,產(chǎn)生Class對(duì)象
    Class clazz = Class.forName(name);
    // 產(chǎn)生該類(lèi)的實(shí)例對(duì)象(空參)
    Object obj = clazz.newInstance();
  }
}

二、獲取字節(jié)碼文件的成員變量

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.lang.reflect.Field;
 
public class GetClassField {
  public static void main(String[] args) throws Exception {
    getField();
  }
 
  /**
   * 獲取字節(jié)碼文件中的成員變量
   */
  public static void getField() throws Exception {
    Class clazz = Class.forName("src.Person");
    Field field = null;
 
    // 獲取本類(lèi)字段,包含私有
    field = clazz.getDeclaredField("age");
 
    // 對(duì)私有字段的訪問(wèn)取消權(quán)限檢查,可稱之為暴力訪問(wèn)
    field.setAccessible(true);
 
    Object obj = clazz.newInstance();
 
    field.set(obj, Integer.valueOf(89));
 
    Object o = field.get(obj);
    System.out.println(o);
  }
}

三、獲取字節(jié)碼文件的成員函數(shù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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[]{"小強(qiáng)", Integer.valueOf(20)});
  }
 
  public static void getMethod_2() throws Exception {
    Class clazz = Class.forName("src.Person");
 
    // 獲取空參數(shù)的方法
    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中的公有函數(shù)
   */
  public static void getMethod() throws Exception {
    Class clazz = Class.forName("src.Person");
 
    // 獲取的都是類(lèi)中的公有方法
    Method[] methods = clazz.getMethods();
 
    // 獲取本類(lèi)中的所有方法
    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);
    }
  }
}

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

原文鏈接:http://blog.csdn.net/qq_35246620/article/details/53584524

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产午夜精品久久 | 欧美视频日韩视频 | 中文字幕一区二区三区在线视频 | jizz中国女人高潮 | 亚洲精品综合 | 中文字幕视频在线观看 | 精品视频免费 | 国产成人av一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 色吧av| 欧洲亚洲一区 | 亚洲日本国产 | 亚洲成人在线观看视频 | 久久视频免费 | 色视频www在线播放国产人成 | 免费污片网站 | 久久久久久综合 | 亚洲免费观看 | 免费在线a | 久草热8精品视频在线观看 久久亚洲精品中文字幕 | 国产福利一区二区三区四区 | 一区二区三区四区在线 | 国产免费成人 | 91国自产精品中文字幕亚洲 | 欧美天堂 | 色在线免费 | 国产精品一区欧美 | 国产精品一区二区三区在线播放 | www.xxx在线观看 | 午夜精品福利在线观看 | 午夜精品久久 | 免费一区二区 | 天天插天天干 | 日韩精品99久久久久中文字幕 | 国产成人福利在线 | 91精品一区二区三区久久久久久 | 亚洲一区自拍偷拍 | av亚洲在线 | 午夜精| 欧美一区二区三区不卡 | 精品久久一二三区 |