1
public class Document1 {
   public static void main(String[] args) {
     String i = "A";
     eg();
   }

   public static void eg(){
      System.out.println("    " + i);
   }
}

我不明白为什么这不起作用。

4

8 回答 8

4

范围

您在以下方法中收到编译器错误。

 public static void eg(){
      System.out.println("    " + i);
   }

因为i 是 main 方法的局部变量。您无法通过其他方式访问。

您可以做的是,将该变量传递到您想要的位置。

 public static void main(String[] args) {
     String i = "A";
     eg(i);
   }

   public static void eg(String param){
      System.out.println("    " + param);
   }
于 2013-10-14T12:50:34.683 回答
2

因为i只存在于主要范围内。你必须像这样传递i内部eg函数eg(String param)

于 2013-10-14T12:54:06.337 回答
1

您应该i作为参数传递给方法eg().

在您的代码中,i是 main 方法中的局部变量。因此,您的方法无法访问它eg()

尝试:

public static void main(String[] args) {
     String i = "A";
     eg(i);
   }
于 2013-10-14T12:50:24.613 回答
1

这就是所谓的问题scopescope是变量可见的代码区域。例如:

for(int x = 0; x < 10; x++)
{
     // x can only be used inside this loop.
}

另一个例子是如果你在一个方法中声明一个局部变量:

private void doSomething()
{
     String value = "this can only be used inside doSomething()";
}

是一个非常有用的链接,解释了这个概念。

对于您的问题,您只需在方法中声明一个变量。您应该将其设为参数化方法:

public void eg(String i)
{
    // Your code as normal.
}
于 2013-10-14T12:55:13.220 回答
0

因为eg()方法不知道变量i。它仅在方法的范围内main()。您需要将其传递给eg()方法或使其成为实例变量(在本例中为静态变量)。

public static void main(String[] args) {
   String i = "A";
   eg(i);
}

public static void eg(String i){
   System.out.println("    " + i);
}
于 2013-10-14T12:50:39.687 回答
0

这与变量作用域有关——“作用域”表示变量可访问的位置。

在您的代码中,i是一个“局部变量”,它仅在它声明的方法内具有作用域(实际上只有它声明之后)。这就是为什么其他方法无法“看到”它的原因。

方法的参数也被认为是局部变量。

下一层是实例变量,其范围是所有方法,但仅限于实例的上下文中——每个实例都有自己的副本。

之后,您将获得静态变量,其范围是每个实例 - 每个定义它的类只有一个副本。


要“修复”您的代码,您可以:

  • 将变量作为参数传递给eg()方法
  • 创建一个static变量,该变量将在方法之外声明
  • 因为您的方法是静态的,所以实例变量无济于事,但是如果您将方法设为实例方法(非静态)并创建类的实例,则该变量将起作用
于 2013-10-14T12:58:14.390 回答
0

您无法String i从您的函数访问,eg()因为它是在main. 您可以i通过放置String i在主函数上方来在全局范围内声明。或将其作为参数传递给您的函数,例如:

public static void eg(String i){

并将函数调用更改为:

eg(i);
于 2013-10-14T12:51:37.017 回答
0

这是范围的问题。您的函数 eg() 无法“看到”变量i因为它不在其视图中。但是,如果您执行以下操作:

public class Document1 {
    String i = "A";

    public static void main(String[] args) {

        eg();
    }

    public static void eg(){
        System.out.println("    " + i);
    }
}

然后它会起作用,因为现在变量范围是整个类文件,而不仅仅是主方法。

于 2013-10-14T12:52:12.183 回答