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

可以从类外部访问java私有数据成员吗?,java,private,data-members,Java,Private,Data Members,可能重复: 有没有什么方法可以让我们在java中调用类的私有数据成员,这些成员可以在类之外访问。 我想问一个棘手的问题。 虽然我有很多java经验,但我认为这是可能的,但我不知道如何做到这一点 根据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

可能重复:

有没有什么方法可以让我们在java中调用类的私有数据成员,这些成员可以在类之外访问。 我想问一个棘手的问题。
虽然我有很多java经验,但我认为这是可能的,但我不知道如何做到这一点

根据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
来访问私有字段。理想情况下,您应该使用public setter和getter方法从类外部访问此类数据(正如其他人所发布的)

定义一个public
get
方法来获取类的私有字段

不,您无论如何都不能访问java中的私有变量

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

  • 不能在类外使用任何私有成员
  • 为此,可以使用getter和setter方法

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

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

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

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

    public Class A{
    
       private String myData;
    
       public String getMyData(){
            return myData;
       }
    
       public void setMyData(String data){
            this.myData=data;
       }
    }
    

    看到了,或者我知道这一点,亲爱的,private不是在类外使用的,但我需要一个代码使之成为可能类Other{private String str;public void setStr(String value){str=value;}}}类Test{public static void main(String[]args)//只是为了便于一次性测试。不要//正常执行此操作!引发异常{Other t=new Other();t.setStr(“hi”);Field Field=Other.class.getDeclaredField(“str”);Field.setAccessible(true);Object value=Field.get(t);System.out.println(value);}}亲爱的,我知道这一点,但这不是我要问的。所以请阅读问题properly@ArunKumarThakur是的,亲爱的。你要发布Java8吗?很抱歉回答了你的重要问题,已经是-3票了。对不起,亲爱的,我再说一遍,你不明白我在问什么,所以请不要评论。有一种方法我们通常不使用,但我们可以通过反思的方式访问课堂外的私人数据成员。我希望你明白我在说什么。thanx亲爱的,这就是我想说的……。为此,两个课程应该放在一个包中?@Android Killer for reflection无所谓,f.setAccessible(true)破坏了安全性。谢谢分享您的知识。那么安全性呢?类概念的主要动机是直接限制对字段的访问。如果有办法访问私有字段/方法,那么Java如何确保安全性?亲爱的,我知道这一点,但这不是我要问的。所以请正确阅读问题关于安全性的内容是什么?类概念的主要动机是直接限制对字段的访问。如果有办法访问私有字段/方法,那么Java如何确保安全性?