JavaJVM · Java虚拟机原理 · JVM上语言·框架· 生态系统Android求生之路

Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符

2020-06-24  本文已影响0人  百工之人

当使用Java反射机制操作类成员时,传入对象的参数改成传入null

package com.zuozuo.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMain {
    private static final String TAG = "VOICE_RECOG";

    public static void main(String[] args) throws Exception {
        // get static field
        Class<?> clazz = Class.forName("com.zuozuo.test.TestMain");
        Field fieldTag = clazz.getDeclaredField("TAG");
        fieldTag.setAccessible(true);
        String tag = (String)fieldTag.get(null); // null object 不要本着这道题不会但不能空着的思想new一个对象...
        System.out.println("TAG is static ? " + Modifier.isStatic(fieldTag.getModifiers()));
        System.out.println(tag);
        
        // invoke static method
        Method method = clazz.getDeclaredMethod("name", String.class);
        String output = (String)method.invoke(null, "B"); // null object
        System.out.println("name is static ? " + Modifier.isStatic(method.getModifiers()));
        System.out.println(output);
    }

    public static String name(String input) {
        if ("A".equals(input)) {
            return "_A_";
        }
        return "_B_";
    }
}

参考

jenkov

上一篇 下一篇

猜你喜欢

热点阅读