• java 反射一


    再现上次面试的一个情景

    面试官:java的工作原理是什么?

    鄙人:JVM加载类用的是反射,通过classLoader及其子类(4种)依次查找

    面试官继续问:java反射的原理是什么?

    鄙人答曰:class反射

    面试官继续追问:简单介绍下class

    鄙人:...........

    说实在,接触这么久java,没有拜读过《深入理解java虚拟机》真是愧对java工程师的称号

    今天正好有时间,先简单写个例子

    public class FieldClass {
    
        private int age;
        String name;
        public static final boolean STATUS = false;
    
        public FieldClass(String name, int age) {
    
            this.name = name;
            this.age = age;
        }
    
        public static void main(String[] args) throws SecurityException,
                NoSuchFieldException, IllegalArgumentException,
                IllegalAccessException {
    
            FieldClass field = new FieldClass("draem0507", 26);
    
            Field nameField = field.getClass().getDeclaredField("name");
            System.out.println(nameField.get(field));
    
            Class<FieldClass> fclass = FieldClass.class;
            Field Fields[] = fclass.getDeclaredFields();
            for (Field f : Fields) {
                StringBuffer bf = new StringBuffer();
                bf.append(f.getName());
                bf.append("[修饰符:").append(
                        isDefault(Modifier.toString(f.getModifiers())));
                bf.append("类型:").append(f.getType().getSimpleName());
    
                bf.append("]");
                System.out.println(bf);
            }
    
        }
    
        private static String isDefault(String modifiers) {
            String mod = modifiers;
            if (modifiers.equals("")) {
                mod = "default";
            }
            return mod;
        }
    
    }

    执行结果

    draem0507
    age[修饰符:2--private类型:int]
    name[修饰符:0--default类型:String]
    STATUS[修饰符:25--public static final类型:boolean]

    1.变量name因为是默认的修饰符,所以转换之后为空,因此做了简单的操作

    2.关于

    Modifier.toString 中使用&(二进制相同位数都为1,则为1,否则为0)
    妙哉妙哉
  • 相关阅读:
    方法返回值使用哪个关键字?
    Java中带参数的方法和JavaScript中带参数的函数有什么不同?
    如何调用方法
    Java中如何声明方法?JavaScript中如何声明函数?
    为什么编程语言中要有方法
    什么叫方法.
    说说字符常量和字符串常量的区别
    什么是JDK?什么是JRE?说说它们之间的区别?
    Go 错误处理
    Go Defer
  • 原文地址:https://www.cnblogs.com/draem0507/p/3127099.html
Copyright © 2020-2023  润新知