3

可能重复:
在 Java 中是否可以通过反射访问私有字段

有什么办法可以让我们在java中调用一个类的私有数据成员,可以在类外访问。我想要一个棘手的问题库。根据我的 Java 经验,我认为这是可能的,但我不知道该怎么做。

4

7 回答 7

8

1)如果 SecurityManager 允许,您可以使用反射来完成

class B {
    private int x = 2;
}

public class A {

    public static void main(String[] args) throws Exception {
        Field f = B.class.getDeclaredField("x");
        f.setAccessible(true);
        f.get(new B());
    }
}

2) 在内部类的情况下

class A {
    private int a = 1;

    class B {
        private int b = 2;

        private void xxx() {
            int i = new A().a;
        };
    }

    private void aaa() {
        int i = new B().b;
    }
于 2012-12-26T07:57:36.583 回答
6

根据 Java 语言规范,第 3 版:

6.6.8 Example: private Fields, Methods, and Constructors

A private class member or constructor is accessible only within the body of the top level class (§7.6) that encloses the declaration of the member or constructor. It is not inherited by subclasses.

您可以reflection在 java 中使用来访问私有字段。理想情况下,您应该使用公共 setter 和 getter 方法从类外部访问此类数据(正如其他人发布的那样)

于 2012-12-26T07:11:44.443 回答
1

有关访问修饰符的更多信息,请查看以下链接

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

这用于通过反射访问 Java 中的私有变量

通过反射访问Java中的私有变量

于 2012-12-26T07:23:44.850 回答
0

您可以使用返回/设置私有字段值的公共方法来执行此操作。

public Class A{

   private String myData;

   public String getMyData(){
        return myData;
   }

   public void setMyData(String data){
        this.myData=data;
   }
}
于 2012-12-26T08:31:04.683 回答
0
  1. 没有私有成员不能在课堂外使用
  2. 为此,您可以使用 getter 和 setter 方法
于 2012-12-26T07:17:49.270 回答
-1

定义一个公共get方法来获取你的类的私有字段。

于 2012-12-26T07:16:11.020 回答
-1

不,您不能以任何方式访问 java 中的私有变量。

您可以提供公共 getter 和 setter 方法来访问或更改私有成员变量的值。

于 2012-12-26T07:16:44.093 回答