zoukankan      html  css  js  c++  java
  • 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)
    妙哉妙哉
  • 相关阅读:
    天气预报APP(2)
    天气预报APP(1)
    android ——网络编程
    android ——Intent
    android ——可折叠式标题栏
    5.1 类,实例,实现,方法
    5.0 面向对象
    python 基础
    模拟实现一个ATM + 购物商城程序
    python 基础
  • 原文地址:https://www.cnblogs.com/draem0507/p/3127099.html
Copyright © 2011-2022 走看看