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中对应属性值

  • 相关阅读:
    Tornado-Lesson06-ORM、SQLAlchemy连接数据库、Module和增删改查
    Tornado-Lesson04-模版、模版转义、静态文件的引用
    Tornado-Lesson05-模版继承、函数和类导入、ui_methods和ui_modules
    博弈论
    给图片添加水印
    Apsara Clouder专项技能认证:实现调用API接口
    好用的工具
    书写是为了更好的思考
    使用与破解ExcelVBA密码
    一款可以直接下载浏览器sources资源的Chrome插件
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13176722.html
Copyright © 2011-2022 走看看