【问题标题】:Variable (h1) out of scope?变量(h1)超出范围?
【发布时间】:2015-08-16 17:21:55
【问题描述】:

在回答是“编译失败”的问题中,因为在 go 方法中 h1 超出了范围。 h1 对我来说看起来很公开,有人可以解释为什么它超出范围吗?一个方法什么时候可以访问其他变量?

public class Happy {
  int id;
  Happy(int i) { id = i; }
  public static void main(String [] args) {
    Happy h1 = new Happy(1);
    Happy h2 = h1.go(h1);
    System.out.println(h2.id);
  }
  Happy go(Happy h) {
    Happy h3 = h;
    h3.id = 2;
    h1.id = 3;
    return h1;
  }
}

【问题讨论】:

    标签: java scope


    【解决方案1】:

    这一行定义

    Happy h1 = new Happy(1);
    

    这在main(String[] args)的范围内

    这就是为什么你不能在main的{}之外访问它。

    【讨论】:

    • 在 main 中声明的任何东西都不能在其他任何地方访问?有没有办法访问 main 中声明的对象?
    • @mc805 您可以访问在main() 中声明的对象,方法是将它们传递到对象可以访问的范围内的某个位置。
    • @mc805 在您的情况下,您已经这样做了,因为 hh3 指向 main 中的对象 h1,因为您传递了对它的引用。
    • @mc805 main() 可以被所有东西访问,但是局部变量只能是本地的并且可以被它所在的方法访问。
    • 现在绝对有意义...谢谢
    【解决方案2】:
    Happy go(Happy h) {
            Happy h3 = h;
            h3.id = 2;
            h1.id = 3;
            return h1;
          }
    

    上述方法中使用的h1超出范围。

    您正在 main 方法中创建 h1 对象,但尝试在 h1 不可见的 go 方法中访问它。

    你可以像下面这样使用它:-

     static Happy h1 = new Happy(1);
    
          public static void main(String [] args) {
    
            Happy h2 = h1.go(h1);
            System.out.println(h2.id);
          }
          Happy go(Happy h) {
            Happy h3 = h;
            h3.id = 2;
            h1.id = 3;
            return h1;
          }
    

    【讨论】:

    • 鉴于h1thishgo 中添加它作为static 可能也不需要。 ;)
    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2021-10-04
    • 2020-12-24
    • 2013-10-26
    • 2016-01-09
    • 2018-09-19
    相关资源
    最近更新 更多