• Java:反射机制


    获取类对象3种方式:

    1. Class.forName("className")
    2. ClassName.class
    3. new ClassName().getClass()

    创建对象:

    传统方式:

    Hero h1 = new Hero();

    反射方式:

      Class pClass = Class.forName("charactor.Hero");
      //构造器
      Constructor c= pClass.getConstructor(); (也可以不用构造器;相当于调用无参构造方法) 
      //通过构造器实例化
      Hero h2= (Hero) c.newInstance();

    访问属性:

     

      //获取类Hero的名字叫做name的字段
      Field f1= h.getClass().getDeclaredField("name");
      //修改这个字段的值
      f1.set(h, "teemo");

     

     

    调用方法:

      // 获取这个类的名字叫做setName,参数类型是String的方法
      Method m = h.getClass().getMethod("setName", String.class);
      // 对h对象,调用这个方法
      m.invoke(h, "盖伦");

    参考:how2j-反射机制

    反射的作用:

    当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,举个例子我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,这个时候反射就有用了,假设 com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection这两个类我们要用,这时候我们的程序就写得比较动态化;
    通过Class tc=Class.forName("com.java.dbtest.TestConnection"); 通过类的全类名让jvm在服务器中找到并加载这个类,而如果是oracle则传入的参数就变成另一个了。这时候就可以看到反射的好处了,这个动态性就体现出java的特性了!
    (编译时不需要知道具体的类,运行时才知道是哪个类,调用该类方法)
    参考:知乎-反射作用

     

  • 相关阅读:
    WebBrowser
    hibernate关系映射(多对多)
    hibernate关系映射(多对一)
    使用maven构建hibernate
    使用maven构建web项目
    Chapter 6 ViewController
    Chapter 5 带颜色的同心圆
    Symbol(s) not found for architecture arm64
    反射实现NSCodingProtocol 帮助类
    UITableView默认选中第一行
  • 原文地址:https://www.cnblogs.com/buwenyuwu/p/7197430.html
Copyright © 2020-2023  润新知