2013-10-14 35 views
1
public class Document1 { 
    public static void main(String[] args) { 
    String i = "A"; 
    eg(); 
    } 

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

我不明白为什么这不起作用。在java中访问其他方法变量?

+2

为什么会期望它的工作? –

+0

变量i不适用于eg()方法,因为它不在范围内。你应该多读一点关于变量,方法和范围的内容。 – Alex

+13

如果你的车里有一瓶威士忌,你可以在房间里喝吗?不。..除非你有一个'getter'从车里带给你:D – Maroun

回答

4

scope

您在下面的方法获得一个编译器错误。

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

因为i是主方法的局部变量。您无法使用其他方法访问。

你可以做的是,将该变量传递到你想要的地方。

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

    public static void eg(String param){ 
     System.out.println(" " + param); 
    } 
+0

谢谢你,对不起,这是一个非常简单的问题,我是新来的java ...和编程一般... – abarnybox

1

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

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

尝试:

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
    } 
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); 
} 
0

,因为它是在main的范围内声明的你不能从你的函数eg()访问String i。您可以通过在主要功能上方放置String i来在全球范围内声明i。或者把它作为参数,以你的功能,如:

public static void eg(String i){ 

和函数调用更改为:

eg(i); 
0

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

public class Document1 { 
    String i = "A"; 

    public static void main(String[] args) { 

     eg(); 
    } 

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

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

2

因为i只存在于主范围内。你必须通过i里面的eg函数,像这样eg(String param)

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

Here是一个非常有益的链接解释的概念。

对于你的问题,你只需在方法中声明一个变量。你应该让一个参数化方法:

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

这一切都做变量范围 - “范围”的意思,其中的变量是可访问的。

在你的代码中,i是一个“局部变量”,它只在声明它的方法范围内(实际上只声明后声明为)。这就是为什么其他方法不能“看到”它。

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

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

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


“修理”你的代码,你可以:

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