【问题标题】:Java variable scopeJava 变量范围
【发布时间】:2011-06-01 10:39:03
【问题描述】:

当一个变量同时在局部作用域和全局作用域初始化时,我们如何在同一个类中不使用this关键字的情况下使用全局作用域?

【问题讨论】:

  • 我不确定 Java 上下文中的“全局范围”是什么意思。对于这个问题,代码示例将大有帮助。
  • 你为什么要尽量避免使用'this'?这就是这样做的方法。
  • 鉴于 Java 没有 全局范围,我不明白这个问题。你能澄清一下吗?

标签: java scope


【解决方案1】:
public class VariableScope {

    int i=12;// Global
    public VariableScope(int i){// local

        System.out.println("local :"+i);
        System.out.println("Global :"+getGlobal());
    }
    public int getGlobal(){
        return i;
    }
}

【讨论】:

    【解决方案2】:
    class MyClass{
        int i;//1
        public void myMethod(){
            i = 10;//referring to 1    
        }
    
        public void myMethod(int i){//2
            i = 10;//referring to 2
            this.i = 10 //refering to 1    
        }    
    }  
    

    另见:

    【讨论】:

      【解决方案3】:

      如果您使用this 限定变量引用,它将始终指向实例变量。

      如果一个方法声明了一个与类级变量同名的局部变量,则前者将“遮蔽”后者。要从方法体内访问类级变量,请使用 this 关键字。

      【讨论】:

      • 如果你用 this 来定义变量引用,它将始终指向 FIELD 变量。
      • @Vladimir 你是对的。我已经纠正了。这是一个错误。
      【解决方案4】:

      没有这个是不可能的。该现象称为variable hiding

      【讨论】:

        【解决方案5】:

        如果您不使用this,它将始终是局部变量。

        【讨论】:

        • 如果本地范围内没有与实例变量同名的变量,则可以使用不带this前缀的实例变量
        猜你喜欢
        • 1970-01-01
        • 2021-07-15
        • 2014-03-02
        • 2017-02-17
        • 1970-01-01
        • 2022-10-17
        • 2017-02-13
        • 2015-09-08
        • 1970-01-01
        相关资源
        最近更新 更多