Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符 判断是否为静态

当使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。