zoukankan      html  css  js  c++  java
  • Java反射机制

    反射就是把Java类中的各个部分,映射成一个个的Java对象,拿到这些对象后可以做一些事情。

    一. 反射机制相关类

    (1)java.lang.Class<T>
    参数类型 T - 由此类对象建模的类的类型。 例如, String.class的类型是Class<String> 。 如果正在建模的类是未知的,请使用Class<?> 。

    1. static Class<?> forName(String className); //返回指定类或接口的字节码对象。
    2. T newInstance(); //创建字节码对象表示的类的实例。

     Class<?> classBook = Class.forName("com.android.Book");
     Book book = (Book)classBook.newInstance();

    3. String getName(); //返回类的完整路径名 。
    4. String getSimpleName();//返回类名
    5. Class<? super T> getSuperclass(); //返回当前类继承的父类的名字
    6. Class<?>[] getInterfaces(); //返回当前类实现的类或是接口
    -----------------------------------------------------------------------------
    7. Field getField(String name) ;//返回指定的公有的属性对象
    8. Field getDeclaredField(String name);//返回指定的属性对象

    Class<?> bookClass = Class.forName("com.android.Book");
    Field tagField = bookClass.getDeclaredField("TAG");//反射私有属性,包括静态属性。
    tagField.setAccessible(true);
    Object bookObject = classBook.newInstance();
    String tag = (String) fieldTag.get(bookObject);

    -----------------------------------------------------------------------------
    9. Constructor<T> getConstructor(Class...<?> parameterTypes);// 返回该类中与参数类型匹配的公有构造方法
    10. Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) //返回该类中与参数类型匹配的构造方法


    (2) java.lang.reflect.Constructor<T>
    Constructor代表类的构造方法。
    T newInstance(Object... initargs);//根据传递的参数创建类的对象

    Class<?> bookClass = Class.forName("com.android.Book");
    Constructor<?> declaredConstructor = bookClass.getDeclaredConstructor(String.class,String.class);
    declaredConstructor.setAccessible(true);
    Book book = (Book)declaredConstructor.newInstance("Android开发","任玉刚");


    (3)java.lang.reflect.Method
    Method代表类的方法
    Object invoke(Object obj, Object... args);//传递object对象和参数,调用该对象对应的方法。

    Class<?> bookClass = Class.forName("com.android.Book");
    Method bookMethod = bookClass.getDeclaredMethod("declaredMethod",int.class);
    bookMethod.setAccessible(true);
    Object bookObject = bookClass.newInstance();
    String str = (String)bookMethod.invoke(bookObject,0);

    (4)java.lang.reflect.Field
    Field代表类的成员变量
    boolean equals(Object obj);//将此Field与指定对象进行比较。
    Object get(Object obj); //获得obj中对应的属性值
    void set(Object obj,Object value);//设置obj中对应属性值

  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13176722.html
Copyright © 2011-2022 走看看