在java中访问其他方法变量?

时间:2013-10-14 12:49:12

标签: java

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

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

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

8 个答案:

答案 0 :(得分:4)

scope

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

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

答案 1 :(得分:2)

因为i仅存在于主范围内。您必须在i函数内传递eg,例如eg(String param)

答案 2 :(得分:1)

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

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

尝试:

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

答案 3 :(得分:1)

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

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()";
}

Here是解释这个概念的非常有用的链接。

对于您的问题,您只需在方法内声明一个变量。你应该把它变成一个参数化的方法:

public void eg(String i)
{
    // Your code as normal.
}

答案 4 :(得分: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);
}

答案 5 :(得分:0)

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

public static void eg(String i){

并将函数调用更改为:

eg(i);

答案 6 :(得分:0)

这是一个范围问题。您的函数eg()无法“看到”变量 i ,因为它不在其视图中。但是,如果你这样做了:

public class Document1 {
    String i = "A";

    public static void main(String[] args) {

        eg();
    }

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

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

答案 7 :(得分:0)

这与变量范围 - &#34;范围&#34;有关。意思是变量可以访问的地方。

在您的代码中,i是一个&#34;局部变量&#34;,它只在声明的方法中具有范围(实际上只有之后&#39> ; s宣布)。这就是为什么其他方法无法看到&#34;它

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

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

之后,您已经拥有了静态变量,其范围是每个实例 - 每个类中只有一个副本被定义。


To&#34; fix&#34;您可以使用以下代码:

  • 将变量作为参数传递给eg()方法
  • 创建一个static变量,该变量将在方法
  • 之外声明
  • 因为你的方法是静态的,实例变量不会有帮助,但是如果你制作了方法实例方法(非静态)并创建了类的实例