可以从类外部访问java私有数据成员吗?

时间:2012-12-26 07:08:31

标签: java private data-members

  

可能重复:
  Is it possible in Java to access private fields via reflection

有没有办法让我们可以在java中调用类的私有数据成员,可以在类外访问。 我希望这是一个棘手的问题银行。 尽管我的java体验,我认为这是可能的,但我不知道如何做到这一点。

7 个答案:

答案 0 :(得分: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.

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

答案 1 :(得分:6)

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;
    }

答案 2 :(得分:1)

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

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

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

Accessing private variables in Java via reflection

答案 3 :(得分:0)

定义公共get方法以获取班级的私有字段。

答案 4 :(得分:0)

不,你无法以任何方式访问java中的私有变量。

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

答案 5 :(得分:0)

  1. 不能在课外使用私人会员
  2. 您可以为此目的使用getter和setter方法

答案 6 :(得分:0)

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

public Class A{

   private String myData;

   public String getMyData(){
        return myData;
   }

   public void setMyData(String data){
        this.myData=data;
   }
}