A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.itheima.day1;

import java.lang.reflect.Field;

import javax.swing.DefaultBoundedRangeModel;

public class CopyOfReflectTest {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
               
           LianXi1 lx = new LianXi1(2);
           //获取该对象中变量a,
           //为什么该变量为default修饰时就不行呢?
          
           Field fieldA = lx.getClass().getField("a");
          
            System.out.println(fieldA.get(lx));
            
        }

}

class LianXi1
{
       
        public int a;
        public LianXi1(int a) {
                super();
                this.a = a;

        }

}

3 个回复

正序浏览
Class类中的方法getField(String)可以获取该类中可见的成员变量;
Class类中的方法getDeclaredField(String)可以获取该类中定义的成员变量; 只要是该类中定义的创元变量都可以获取, 但是不能访问私有的或受保护的;
要想访问使用Field类中的setAccessible(boolean)方法, 就可以设置访问权限, 可以讲私有的属性设置为可见的了;
回复 使用道具 举报
是的
Field getField(String name)
          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field getDeclaredField(String name)
          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
对private的属性修改 由于权限不够还要加上setAccessible(true) 用于取消权限检查。
回复 使用道具 举报
public Field getField(String name)
               throws NoSuchFieldException,
                      SecurityException返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。name 参数是一个 String,用于指定所需字段的简称。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
public Field[] getDeclaredFields()
                          throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马