本文主要是介绍Java反射使用指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、Java反射获取类
1.1 通过类全名
Class c = Class.forName("com.vo.Person");
1.2 通过类型获取
Class c =Person.class;
1.3 使用getClass();
Person person = new Person("zm",22);
Class c = person.getClss;
1.4 通过类加载器
ClassLoader classLoader = this.getClass().getClassLoader();
Class clazz4 = classLoader.loadClass("com.mysql.cj.jdbc.MysqlDataSource"));
System.out.println(clazz4.getName());
二、 反射获取方法
2.1 获得所有构造方法
Class clazz = Class.forName("com.mysql.cj.jdbc.MysqlDataSource");
Constructor[] constructors = clazz.getDeclaredConstructors();
System.out.println("------获取类中的构造方法-----------");
Arrays.stream(constructors).forEach(obj -> {
System.out.println(obj);
});
2.2 获取类中定义的方法、修饰符
System.out.println("------获取类中定义的方法、修饰符-----------");
for (Method method : methods) {
System.out.println(method.getName());
System.out.println(method.getModifiers());
}
三、反射获取属性
Class clazz = Class.forName("com.mysql.cj.jdbc.MysqlDataSource");
System.out.println("-------获取公有的属性------------");
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println(field.getName());
}
System.out.println("-------获取所有的属性------------");
Field[] pubFields = clazz.getDeclaredFields();
for (Field pubField : pubFields) {
pubField.setAccessible(true);
System.out.println(pubField.getName());
}
四、注解
4.1 类上注解
// 此处要用反射将字段中的注解解析出来
Class<ReflectAnnotation> clz = ReflectAnnotation.class;
// 判断类上是否有次注解
boolean clzHasAnno = clz.isAnnotationPresent(FieldTypeAnnotation.class);
if (clzHasAnno) {
// 获取类上的注解
FieldTypeAnnotation annotation = clz.getAnnotation(FieldTypeAnnotation.class);
// 输出注解上的属性
int age = annotation.age();
String[] hobby = annotation.hobby();
String type = annotation.type();
System.out.println(clz.getName() + " age = " + age + ", hobby = " + Arrays.asList(hobby).toString() + " type = " + type);
}
4.2 方法上注解
4.3 字段上注解
这篇关于Java反射使用指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!