zoukankan      html  css  js  c++  java
  • 【JAVA SE基础篇】67.反射机制介绍

    1.动态语言

    程序在运行的时候,可以改变程序结构或变量类型。

    典型的语言:Python,ruby,javascript等

    例:javascript代码:

    function test(){

      var s="var a=3;var b=5;alert(a+b);":  

      eval(s);

    }

    c,c++,java不是动态语言,java是“准动态语言”。

    但是java有一定的动态性,我们可以利用反射机制,字节码的操作获得类似动态语言的特性

    java的动态性让编程更加灵活

    2.反射机制介绍(reflection)

    指的是可以运行时加载,探知,使用编译期间完全未知的类

    程序在运行状态中,可以动态加载一个只有名称的类

    对于任意一个已加载的类,都能够知道这个类的所有属性和方法;

    对于任意一个对象,都能够调用他的任意方法和属性

    Class c =Class.forName(“”);

    加载完类之后,在堆内存中,产生一个Class类型的对象(一个类只有一个Class对象)

    这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。

    这个对象就像一面镜子,透过镜子看到类的结构,称位反射。

    例:

     注:java.lang.Class类十分特殊,用来表示java中的类型本身

    Class类的对象包含了某个加载类的结构。一个被加载的类对应一个Class对象

    当一个Class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM便自动产生一个Class对象

    Class类是反射的根本,任何想动态加载、运行的类,唯有先获得相应的Class对象

    3.获取Class类对象的方法

    1.getClass()

    2.Class.forName()

    3..class语法

    例;

    4.反射机制的性能

    setAccessible提高反射性能

    用法:

      1.启用和禁用访问安全检查的开关,值为true则指示反射的对象在使用时应该取消java语言访问检查

    值为false则指示反射的对象应该实施java语言访问检查。并不是为true就能访问,为false就不能访问

      2.禁止安全检查,可以提高反射的运行速度

    5.反射机制的常见作用

    1.动态加载类、动态获取类的信息(属性、方法、构造器)

    2.动态构造对象

    3.动态调用类和对象的任意方法、构造器

    4.动态调用和处理属性

    5.获取泛型信息

    java中采用泛型擦除机制来引入泛型。java中泛型只给编译器看,确保数据安全型和免去强制类型转换的麻烦

    一旦编译完成,所有泛型有关的类型全部擦除,而反射操作的是加载好的类,看不泛型。

    为了通过反射操作此类型以迎合实际开发需求,java新增了ParameterizedType,GenericArrayType

    TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的的类型但是又和原始类型齐名的类型

    ParameterizedType:表示一种参数化的类型,比如Collection<String>

    GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型

    TypeVariable:是各种类型变量的公共父接口

    WildcardType:代表一种通配符类型表达式

     

    6.处理注解

  • 相关阅读:
    Solr部署准备
    linux 安装SVN
    构建高性能web站点--读书大纲
    webapi请求
    搭建git服务器
    git常用知识整理
    Ruby on Rail 开发入门
    Ruby on rail 开发准备
    PHP模拟请求雅虎竞标商品加价
    JAVA httpURLConnection curl
  • 原文地址:https://www.cnblogs.com/chengkuan/p/13427165.html
Copyright © 2011-2022 走看看