java反射基础

1. 获取类对象和常用方法

        User user = new User();
        user.setUserId(2018);
        user.setUserName("反射");
/*----------------------------获取类对象----------------------------------*/

        // 对象.getClass(); 获取类对象
        Class<?> aClass = user.getClass();

        // 类.class; 获取类对象
        Class<User> bClass = User.class;

        // Class.forName("类的全路径");  获取类对象
        Class<?> cClass = null;
        try{
            cClass = Class.forName("User");
        }catch(Exception e){
            e.printStackTrace();
        }

/*-------------------------------获取类的字段--------------------------------*/

        // 返回类或接口的所有已声明字段
        Field[] declaredFields = bClass.getDeclaredFields();
        for (Field field:declaredFields){
            // 设置属性是可以访问的(私有的也可以,否则含有私有的属性,报错)
            field.setAccessible(true);
            // 得到此属性的值
            Object o = field.get(user);
            System.out.println("属性:"+o);
        }

        // 返回类或接口的所有可访问的公共字段
        Field[] fields = bClass.getFields();
        for (Field field:fields){
            System.out.println("-->:"+field.get(user));
        }

      // 返回的类或接口的指定public字段
      Field userId = bClass.getField("userId");
        System.out.println("-->:"+userId);

/*--------------------------------获取类的方法-----------------------------------*/

       // 返回类或接口的所有声明的方法,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
        Method[] declaredMethods = bClass.getDeclaredMethods();
        for (Method method:declaredMethods){
           System.out.println("方法名称:"+method);
        }

       // 返回类或接口的所有公共方法,包括那些由类或接口从超类和超接口继承的声明。
        Method[] methods = bClass.getMethods();
        for (Method method:methods){
            System.out.println("-->:"+method);
        }

       // 返回类或接口的指定的公共成员方法 getMethod(String name, 类<?>... parameterTypes)
        // name - 方法的名称 ; parameterTypes - 参数列表(没有参数,则不传值)
        Method method = bClass.getMethod("setUserId", Integer.class);

/*----------------------------------其他方法----------------------------------------*/
        // 返回基础类的简单名称,如果基础类是匿名的,则返回一个空字符串。
        String simpleName = bClass.getSimpleName();

        // 判断user实例对象是否是该类对象
        boolean instance = cClass.isInstance(user);

        // 判断类对象是否是一个基本类型。
        Class<Integer> clazz = int.class;
        boolean primitive = clazz.isPrimitive();

        // 获取具有给定名称的资源路径
        URL path=this.getClass().getResource("User.class");

        // 获取具有给定名称的资源输入流
        InputStream inputStream = this.getClass().getResource.getResourceAsStream("picture.png");

2. 获取属性对象和常用方法

       // 返回类或接口的所有已声明字段
        Field[] declaredFields = bClass.getDeclaredFields();
        for (Field field:declaredFields){
            // 设置属性是可以访问的(私有的也可以)
            field.setAccessible(true);
            // 得到此属性的值
            Object o = field.get(user);
            System.out.println("属性值:"+o);

            // 获取属性名称
            String name = field.getName();
            System.out.println("属性名称:"+name);
        }

3. 获取方法对象和常用方法

       // invoke(Object obj, Object... args)  obj:调用底层方法的对象 args:方法调用使用的参数(没有参数,则不传值)
        method.invoke(person, 118);
        // 获取方法名称
        method.getName();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值