public class Document1 {
public static void main(String[] args) {
String i = "A";
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
我不明白为什么这不起作用。
答案 0 :(得分: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);
}
答案 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
变量,该变量将在方法