反射Class类

Class类是反射的根源,很多很多的类,经过抽象,得出了一个Class类,包括类名,构造方法,属性方法等。得到Class类的对象的三种方式:

  1. Object类中的getClass()方法
  2. 通过类名.class
  3. 通过Class.forName()方法

代码示例:

import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier; public class ReflectionDemo { //JUnit测试的方法一定要是public /**
* 获取Class对象的三种方式
*/
@Test
public void function() {
//第一种方式:通过对象的getClass方法获得
Dog dog = new Dog("Tom", "男", 5);
Class dogClass1 = dog.getClass(); //第二种方式:通过类.class
Class dogClass2 = Dog.class; //第三种方式:通过Class.forName()方法
try {
Class dogClass3 = Class.forName("reflection.Dog");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} /**
* 通过反射来实例化对象
*/
@Test
public void function2() {
try {
Class<Dog> dogClass = (Class<Dog>) Class.forName("reflection.Dog"); //获取默认的构造器,并创建一个Dog对象
Dog dog1 = ((Dog) dogClass.newInstance());//调用了默认的无参构造
System.out.println("dog1:" + dog1); //获取一个指定的构造器,并通过构造器创建一个Dog对象
Constructor<Dog> constructor = dogClass.getConstructor(String.class, String.class, int.class);
Dog dog2 = constructor.newInstance("Tom", "female", 4);
System.out.println("dog2:" + dog2); //获取所有的构造方法
Constructor<?>[] constructors = dogClass.getConstructors();
for (int i = 0; i < constructors.length; i++) {
//获取构造方法的参数个数
System.out.println("构造方法参数个数为:" + constructors[i].getParameterCount());
} //获取所有属性(包括私有属性)
Field[] fields = dogClass.getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
//获得属性的修饰符
int modifiers = fields[i].getModifiers();
System.out.println(Modifier.toString(modifiers) + " " + fields[i].getType() + " " + fields[i].getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

总结

通过反射获取到的Class对象,我们可以用于创建对象,获得构造器,获取参数类型等。

最新文章

  1. YARN-MR 大数据第二天
  2. 搭建 SubversionEdge for VS
  3. valueOf()方法
  4. js遍历json数据
  5. jsp中 response和request区别
  6. eclipse jetty启动内存溢出
  7. Aizu 2302 On or Off dfs/贪心
  8. USACO3.35A Game(记忆化)
  9. JFinal 的源代码超具体的分析DB+ActiveRecord
  10. VB6之CRC32
  11. 谈谈webpack 的优势
  12. 201521123112《Java程序设计》第11周学习总结
  13. 201521123050 《Java程序设计》第13周学习总结
  14. GRE 协议简介
  15. intelliJ IDEA安装、激活与汉化
  16. DIV内文字两端对齐
  17. numpy、pandas
  18. JavaEE 之 Spring(一)
  19. linux 磁盘 扩展分区
  20. 使用CollectionViewSource,通过Xaml绑定自动排序

热门文章

  1. MyView.java 自己画的view
  2. cookie字段属性解析
  3. JS实现多Div模块拖拽功能
  4. ZOJ 3329 One Person Game(概率DP,求期望)
  5. SPSS详细教程:OR值的计算
  6. 用SPSS做时间序列
  7. 腾达Tenda W311MA无线网卡Linux下驱动安装
  8. java调用数据库中的函数和存储过程
  9. 三种分布式锁 简易说说(包含前一篇提到的redis分布式锁)
  10. JSTL报错Unable to read TLD &quot;META-INF/c.tld&quot; from JAR file &quot;file.............................