
java reflect是什么?让我们一起来了解一下吧!
java reflect是反射机制,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

实现反射的方法:
一、获得类的信息(获得到的是类的全路径信息)
获取类的信息有三种方法:
1.使用class类的forName()方法获取类的信息
2.使用实例的getClass()获取类的信息
3.通过类名获得类的信息
二、使用类的信息创建类
获得类的信息之后,可以使用reflect(反射)包下面的Field和Method类获得类的属性和方法,并对属性和方法进行操作。
获得类的全路径名以后可以通过使用Class类中的getDeclaredMethod(String name, Class
getDeclaredField(String name)方法如下:
public class ClassUtils {
/**
* 获取属性字段
* @param clazz 类
* @param fieldName 属性名称
* @throws Exception
*/
public static void getDeclaredField(Class clazz, String fieldName) throws Exception{
System.out.println(clazz.getDeclaredField(fieldName));
}
}
public class ClassTest {
public static void main(String[] args) {
try {
Class clazz = Class.forName("reflectdemo.SuperHero");
//测试公有属性
ClassUtils.getDeclaredField(clazz, "ADDRESS");
//测试私有属性
ClassUtils.getDeclaredField(clazz, "name");
} catch (Exception e) {
e.printStackTrace();
}
}
}getDeclaredFields()方法如下:
public class ClassUtils {
/**
* 遍历clazz对象已有的成员变量
* @param clazz
*/
public static void getDeclaredFields(Class clazz){
Field[] fields = clazz.getDeclaredFields();
for (Field field: fields) {
//如果要设置值,需要加入下面这句,反射对象在使用时不使用Java语言访问检查
//field.setAccessible(true);
//直接打印Field
System.out.println(field);
//手动获取变量类型和变量名称
System.out.println(field.getType().getName() + " " +field.getName());
System.out.println("--------------------");
}
}
}
public class ClassTest {
public static void main(String[] args) {
try {
Class clazz = Class.forName("reflectdemo.SuperHero");
//遍历成员变量
ClassUtils.getDeclaredFields(clazz);
} catch (Exception e) {
e.printStackTrace();
}
}
}以上就是小编今天的分享了,希望可以帮助到大家。
