Java 变量(h1)超出范围?

Java 变量(h1)超出范围?,java,scope,Java,Scope,在一个问题中,答案是“编译失败”,因为在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.pr

在一个问题中,答案是“编译失败”,因为在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;
  }
}
这一行定义了

Happy h1 = new Happy(1);
这在
main(字符串[]args)

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

Happy go(Happy h) {
        Happy h3 = h;
        h3.id = 2;
        h1.id = 3;
        return h1;
      }
上述方法中使用的h1超出范围

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

您可以按如下方式使用:

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

main中声明的任何内容都不能在其他任何地方访问?有办法访问main中声明的对象吗?@mc805您可以访问
main()
中声明的对象,方法是在对象可以访问的范围内的某个地方传递它们。@mc805在您的例子中,您已经这样做了,因为
h
h3
指向main中的对象
h1
,因为您传递了对它的引用。@mc805 main()所有的东西都可以访问,但是局部变量只是局部的,并且它所在的方法也可以访问。现在肯定有意义了。。。ThanksGiven
h1
这个
h
go
中可能也不需要将其添加为
静态
。)