• Java:reflection


    参考:http://docs.oracle.com/javase/tutorial/reflect/index.html

    what and why?

    通过反射来检测或者修改应用某些对象在运行时的状态或者行为。允许程序在运行时通过Reflecttion APIs 动态取得任意一个已知名称的class 的内部信息,包括其修饰符(诸如public static 等等)父类(例如Object) 实现之接口(例如serializable),也包括成员变量和方法的所有信息,并可于运行时改变成员变量的内容或者调用方法(包括私有方法,我们知道被private 修饰的封装的机制,是不能被外部所使用的,但是通过反射,我们可以改变私有变量和方法)。举例:spring框架是事先就写好的框架,他内部的处理并不知道用户要写哪些类,因为那是以后由用他的人来定的,所以用户在用的时候才去配置文件中配置类路径,这是一个典型反射的例子。

    Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。因此在运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力

    how?

    1)运用getClass()
    注:每个class 都有此函数
    String str = "abc";
    Class c1 = str.getClass();
    2)运用Class.getSuperclass()
    Button b = new Button();
    Class c1 = b.getClass();
    Class c2 = c1.getSuperclass();
    3)运用static method------Class.forName()(最常被使用)
    Class c1 = Class.forName ("java.lang.String");
    Class c2 = Class.forName ("java.awt.Button");
    Class c3 = Class.forName ("java.util.LinkedList$Entry");
    Class c4 = Class.forName ("I");
    Class c5 = Class.forName (".class");
    4)运用primitive wrapper classes的TYPE 语法
    Class c1 = Boolean.TYPE;
    Class c2 = Byte.TYPE;
    Class c3 = Character.TYPE;
    Class c4 = Short.TYPE;
  • 相关阅读:
    iOS TTF文件改变字体
    iOS CoreAnimation 核心动画
    iOS no visible @interface for 'UIButton' declares the selector errors
    iOS 如何通过CocoaPods添加第三方框架
    iOS AVAudioPlayer播放音乐
    iOS 一些常用代码的总结
    iOS 基础
    qworker 实例
    delphi RTTI 反射技术
    delphi IOUtils单元 处理文件路径相关
  • 原文地址:https://www.cnblogs.com/lucky-star-star/p/5443465.html
Copyright © 2020-2023  润新知