反射

作者: Hao_38b9 | 来源:发表于2020-04-24 18:52 被阅读0次

    反射(Reflection)

    可以在运行时加载,使用未知的包,类,方法等等

    弥补强类型语言的不足

    基于反射创建对象

    • Class.forname('A').newInstance();
    • A.class.newInstance();
    • A.class.getConstructor.newInstance();
    class A{
        public void hello(){
            System.out.println("hello");
        }
    }
    public class ReflectStudy {
        public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
            Object object = Class.forName("reflectstudy.A").newInstance();
            Method method = Class.forName("reflectstudy.A").getMethod("hello");
            method.invoke(object);
    
            Object object2 = A.class.newInstance();
            
            Constructor<A> constructor = A.class.getConstructor();
            Object object3 = constructor.newInstance();
        }
    }
    

    反射关键类

    Class

    获取方式:

    • obj.getClass();
    • Class.forName();
    • SomeClass.class;

    Class c = A.class;

    Class 可以获取:

    • 成员变量 Field
      • c.getFields();//获取所有公有字段
      • c.getDeclaredFields();// 获取所有非继承的字段,包括私有字段
    • 方法 Method
    • 构造函数 Constructor
    • 修饰符 Modifiers
    • 包 Package
    • 父类 SuperClass
    • 父接口 SuperInterfaces
    • 等等

    相关文章

      网友评论

          本文标题:反射

          本文链接:https://www.haomeiwen.com/subject/wklqwhtx.html