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 个回复

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