public class Document1 {
public static void main(String[] args) {
String i = "A";
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
我不明白为什么这不起作用。
public class Document1 {
public static void main(String[] args) {
String i = "A";
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
我不明白为什么这不起作用。
您在以下方法中收到编译器错误。
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);
}
因为i
只存在于主要范围内。你必须像这样传递i
内部eg
函数eg(String param)
。
您应该i
作为参数传递给方法eg().
在您的代码中,i
是 main 方法中的局部变量。因此,您的方法无法访问它eg()
。
尝试:
public static void main(String[] args) {
String i = "A";
eg(i);
}
这就是所谓的问题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()";
}
这是一个非常有用的链接,解释了这个概念。
对于您的问题,您只需在方法中声明一个变量。您应该将其设为参数化方法:
public void eg(String i)
{
// Your code as normal.
}
因为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);
}
这与变量作用域有关——“作用域”表示变量可访问的位置。
在您的代码中,i
是一个“局部变量”,它仅在它声明的方法内具有作用域(实际上只有在它声明之后)。这就是为什么其他方法无法“看到”它的原因。
方法的参数也被认为是局部变量。
下一层是实例变量,其范围是所有方法,但仅限于实例的上下文中——每个实例都有自己的副本。
之后,您将获得静态变量,其范围是每个实例 - 每个定义它的类只有一个副本。
要“修复”您的代码,您可以:
eg()
方法static
变量,该变量将在方法之外声明您无法String i
从您的函数访问,eg()
因为它是在main
. 您可以i
通过放置String i
在主函数上方来在全局范围内声明。或将其作为参数传递给您的函数,例如:
public static void eg(String i){
并将函数调用更改为:
eg(i);
这是范围的问题。您的函数 eg() 无法“看到”变量i因为它不在其视图中。但是,如果您执行以下操作:
public class Document1 {
String i = "A";
public static void main(String[] args) {
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
然后它会起作用,因为现在变量范围是整个类文件,而不仅仅是主方法。