Java

[Java] Java反射的最简示例

2017-02-10  本文已影响42人  何幻

(1)假设工程目录为/Project

(2)在目录/Project/com/github/thzt/中,新建两个文件

// 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)从程序入口运行

java com.github.thzt.Reflection

(5)控制台输出结果

Hello Reflection

注:
(1)包的物理结构应该和逻辑结构一致
物理结构(目录结构):com/github/thzt/
逻辑结构(限定名):com.github.thzt

(2)入口的类名要与文件名一致
类名:Reflection
文件名:Reflection.java

(3)编译会报警

注: com/github/thzt/Reflection.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
上一篇 下一篇

猜你喜欢

热点阅读