Java中的影子变量是什么?

Java中的影子变量是什么?,java,jakarta-ee,Java,Jakarta Ee,我在读一本书,偶然发现了Java中的术语“影子变量”,但没有对它的描述。最终,这些变量是用来做什么的?它们是如何实现的?我可能会要求您阅读相关内容,而不是提供我自己的描述,例如:。一旦您理解了变量的阴影,我建议您继续阅读覆盖/阴影方法和可见性的相关内容,以全面理解这些术语 事实上,由于这个问题是用Java提出的,这里有一个小例子: public class Shadow { private int myIntVar = 0; public void s

我在读一本书,偶然发现了Java中的术语“影子变量”,但没有对它的描述。最终,这些变量是用来做什么的?它们是如何实现的?

我可能会要求您阅读相关内容,而不是提供我自己的描述,例如:。一旦您理解了变量的阴影,我建议您继续阅读覆盖/阴影方法和可见性的相关内容,以全面理解这些术语

事实上,由于这个问题是用Java提出的,这里有一个小例子:

    public class Shadow {

        private int myIntVar = 0;

        public void shadowTheVar(){

            // since it has the same name as above object instance field, it shadows above 
            // field inside this method
            int myIntVar = 5;

            // If we simply refer to 'myIntVar' the one of this method is found 
            // (shadowing a seond one with the same name)
            System.out.println(myIntVar);

            // If we want to refer to the shadowed myIntVar from this class we need to 
            // refer to it like this:
            System.out.println(this.myIntVar);
        }

        public static void main(String[] args){
            new Shadow().shadowTheVar();
        }
    }

在Java中,有三种变量:局部变量、实例变量和类变量。变量有其作用域。不同类型的变量具有不同的作用域。如果存在范围更近的同名变量,则变量将被隐藏。换句话说,按名称引用变量将使用作用域中最接近的变量,外部作用域中的变量将被隐藏。在本文中可以看到关于隐藏的快速思考:尽量不要使用隐藏变量。它使代码读者感到困惑。