黑马程序员技术交流社区

标题: 反射中的getField() 只能访问public 成员变量吗? [打印本页]

作者: 孙地豪    时间: 2012-3-19 16:43
标题: 反射中的getField() 只能访问public 成员变量吗?
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;

        }

}

作者: 李深山    时间: 2012-3-19 16:46
public Field getField(String name)
               throws NoSuchFieldException,
                      SecurityException返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。name 参数是一个 String,用于指定所需字段的简称。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
public Field[] getDeclaredFields()
                          throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
作者: 魏群    时间: 2012-3-19 18:26
是的
Field getField(String name)
          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field getDeclaredField(String name)
          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
对private的属性修改 由于权限不够还要加上setAccessible(true) 用于取消权限检查。
作者: a504079589    时间: 2012-3-19 18:36
Class类中的方法getField(String)可以获取该类中可见的成员变量;
Class类中的方法getDeclaredField(String)可以获取该类中定义的成员变量; 只要是该类中定义的创元变量都可以获取, 但是不能访问私有的或受保护的;
要想访问使用Field类中的setAccessible(boolean)方法, 就可以设置访问权限, 可以讲私有的属性设置为可见的了;





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2