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的特性了!
(编译时不需要知道具体的类,运行时才知道是哪个类,调用该类方法)
参考:知乎-反射作用

 

原文地址:https://www.cnblogs.com/buwenyuwu/p/7197430.html