当前位置: 首页 > 面试题库 >

如何访问此私有变量?

柯建修
2023-03-14
问题内容

编写以下代码时,编译器如何不抱怨?

public class MyClass 
{
    private int count;

    public MyClass(int x){
        this.count=x;
    }

    public void testPrivate(MyClass o){
        System.out.println(o.count);
    }   
}

即使它是在其中testPrivate编写的同一类的实例,也不应该在处给出编译错误System.out.println(o.count)吗?毕竟,我试图直接访问一个私有变量。
该代码甚至可以正常运行。


问题答案:

私有成员可以从声明它的类中的任何方法访问,无论该方法是访问其自己的(this)实例的私有成员还是访问其他实例的私有成员。

JLS
6.6.1中
对此进行了说明:

…否则,如果将成员或构造函数声明为私有,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。

爪哇此功能允许您编写接受类的实例作为参数(例如-方法clone(Object other)compareTo(Object other))而不依赖于具有非私人的getter所有私人性质需要访问的类。



 类似资料:
  • 为什么我能够直接访问的私有属性在的方法的实现中?似乎使用getter应该是访问它的唯一(如果不是,最好的实践)方式。我错过了什么?

  • 我在kotlin中初始化了一些私有Int变量。 我的问题是,当我旋转手机时,会创建一个新的is活动,在当前代码中,分数被分配为0。是否有任何方法可以只初始化一次?出路是什么? 我在使用分数创建内部有一些计算。由于 onRestoreInstanceState 是在 onCreate 之后执行的,除了在 onStart 中定义分数之外,有没有办法保持分数值在屏幕旋转时不受影响?

  • 我在Angular-6服务中使用了一个私有变量。ts。 它被用来像 我想为tagSubject编写一个单元测试。 我不能做,因为它会给出错误,比如。我现在能做什么。请帮忙。

  • 因此,我试图用Kotlin开发一个Android应用程序,作为纸笔RPG伴侣。现在我想创造一个暴民阶层 在另一个活动中,我想显示以下信息: Android studio不断告诉我不能访问“名称”:尽管它在“Mob”中是私有的。我以为这就是我得到< code>get()的原因? 也许有更多静态编程语言经验的人可以帮忙。提前谢谢你。

  • 问题内容: 如您所知,Spring可以将值注入私有实例变量,而Hibernate可以访问持久类的私有变量。但是,我什至不能通过反射来调用类的受保护方法!Spring和Hibernate如何公然破坏安全性?更重要的是,我该怎么做?:D 问题答案: 在没有禁止性安全管理器的情况下运行时,可以获取相应方法或字段低谷反射的实例,然后在其上调用setAccessible()。 使用Java安全管理器,您当然

  • 我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?