java reflect

作者:原创时间:2022-04-16
文档

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();
        }
    }
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java regex java openssl java orm java outer java outofmemory java overload java resources java resolve java require java region java render java override java pandas java parse java repeat java parser java request java partial java requests java rest java reference java redirect java rectangle java openjdk java opengl java openfire java onvif java inputstreamreader java influxdb java implements java image java htmlunit java hibernate java number java nslookup java notify java node类 java hdfs java hashcode java getbytes