zoukankan      html  css  js  c++  java
  • 反射

    主要说两点1.什么是反射2.反射的应用场景
    1:什么是反射
    在类加载到内存中的时候,要将编译后的.class文件读入内存,并由Class类为之创建Class对象
    在内存中一个类只有一个Class对象产生
    所谓反射就是可以通过类获取该类的所有属性和方法
    类加载的过程:
    当我们new Stu()时候,jvm会加载我们的stu.class
    jvm会去本地磁盘上找到stu.class文件,并加载到jvm内存中
    这时jvm会自动创建一个Class对象,并且一个类只会创建一个
    反射就是通过这个Class对象反向获取这个类的各种信息
    获取Class对象的三种方式:

     1 public class Demo1_Reflect {
     2     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException {
     3         //第一种
     4         Class clazz1 = Class.forName("cn.alibaba.spq.Person");
     5         //第二种
     6         Person per = new Person();  
     7         Class perClass = per.getClass();
     8         //第三种
     9         Class persClass = Person.class; 
    10     }
    11 }


    在Class类的api中可以查看到各种方法:
    常用如下:

     1 public class Demo1_Reflect {
     2     public static void main(String[] args) throws Exception {
     3         //第一种
     4         Class clazz1 = Class.forName("cn.alibaba.spq.Person");
     5         //获取构造方法
     6         Constructor[] arrcon = clazz1.getDeclaredConstructors();
     7         for (Constructor c : arrcon) {
     8             System.out.println(c);
     9         }
    10         //获取属性
    11         System.out.println("---------");
    12         Field[] fields = clazz1.getDeclaredFields(); 
    13         for (Field field : fields) {
    14             System.out.println(field);
    15         }
    16         //获取方法
    17         System.out.println("---------");
    18         Method[] merArr = clazz1.getDeclaredMethods();
    19         for (Method method : merArr) {
    20             System.out.println(method);
    21         }
    22     }
    23 }

    2.反射的应用场景

    在获取Class对象上常用第一种方式,因为只需要传入String,这样我们就可以把String写在配置文件中,然后采用获取配置文件的方式进行加载,如下:

    1 BufferedReader br = new BufferedReader(newFileReader("xxx.properties"));    //创建输入流关联xxx.properties
    2 Class clazz = Class.forName(br.readLine());                                    //读取配置文件中类名,获取字节码对象

    其实这种方式在Spring中用到最多,经典的就是在xml文件或者properties里面写好了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了

  • 相关阅读:
    nSStirng、NSArray、以及枚举(Method小集合)
    http://www.cnblogs.com/beniao/category/172407.html Flex & .NET
    开发帮助文档Api
    JavaScript初学者应注意的七个细节
    javascript实现可以拖动的层示例(层拖动,兼容IE/FF)
    利用IE自带的WebBrowser进行打印
    asp 循环语句
    Form.elements[i]的使用
    Web控件tbSkin主题的应用
    asp 过程总结
  • 原文地址:https://www.cnblogs.com/jaro/p/8975088.html
Copyright © 2011-2022 走看看