(1)假設(shè)工程目錄為/Project
(2)在目錄/Project/com/github/thzt/
中撑蒜,新建兩個(gè)文件
// A.java
package com.github.thzt;
class A {
private void a() {
System.out.println("Hello Reflection");
}
}
// Reflection.java
package com.github.thzt;
import java.lang.reflect.Method;
public class Reflection {
public static void main(String[] args) throws Exception {
Class cls = Class.forName("com.github.thzt.A");
Object instance = cls.newInstance();
Method mtd = cls.getDeclaredMethod("a");
mtd.setAccessible(true); //訪問private方法
mtd.invoke(instance);
}
}
(3)在工程目錄/Project
,編譯
javac com/github/thzt/*.java
(4)從程序入口運(yùn)行
java com.github.thzt.Reflection
(5)控制臺(tái)輸出結(jié)果
Hello Reflection
注:
(1)包的物理結(jié)構(gòu)應(yīng)該和邏輯結(jié)構(gòu)一致
物理結(jié)構(gòu)(目錄結(jié)構(gòu)):com/github/thzt/
邏輯結(jié)構(gòu)(限定名):com.github.thzt
(2)入口的類名要與文件名一致
類名:Reflection
文件名:Reflection.java
(3)編譯會(huì)報(bào)警
注: com/github/thzt/Reflection.java使用了未經(jīng)檢查或不安全的操作晰奖。
注: 有關(guān)詳細(xì)信息, 請(qǐng)使用 -Xlint:unchecked 重新編譯。