Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从主方法访问实例变量,但可以从其他方法访问_Java_Static_Main - Fatal编程技术网

Java 无法从主方法访问实例变量,但可以从其他方法访问

Java 无法从主方法访问实例变量,但可以从其他方法访问,java,static,main,Java,Static,Main,//编辑:我想我代表的问题是错误的。我熟悉“我们需要一个实例来访问非静态变量和方法”这一概念 但我的问题是 当我在eclipse中键入prgm时,它在B行显示一个错误,但我希望即使在A行也会显示错误// 这是一个基本问题,请不要介意 尝试打印a(标记为B)时,编译器在主方法中显示错误 (错误无法静态引用非静态字段a) 问题-为什么add()方法(标记为A)中不出现相同的错误变量A必须声明为静态,如下所示: private static int a = 1 ; 您不能在静态Java方法中使用实例

//编辑:我想我代表的问题是错误的。我熟悉“我们需要一个实例来访问非静态变量和方法”这一概念

但我的问题是

当我在eclipse中键入prgm时,它在B行显示一个错误,但我希望即使在A行也会显示错误//

这是一个基本问题,请不要介意

尝试打印a(标记为B)时,编译器在主方法中显示错误 (错误无法静态引用非静态字段a
问题-为什么add()方法(标记为A)中不出现相同的错误

变量A必须声明为静态,如下所示:

private static int a = 1 ;

您不能在静态Java方法中使用实例变量。

您的主方法应该是:

因为,
a
是一个实例变量,您需要在静态方法中使用实例
t

public static void main(String[] args) {
   Test1 t=new Test1();
   System.out.println(t.a);
}

add
方法中,它是可访问的,因为它是一个成员方法,所有成员变量都可以在该目录中访问。因此,它是有效的,并且没有错误。

只有当您有权访问类Test1的实例时,才能调用add方法。类Test1的每个实例都有一个变量a的副本


但是,您试图直接/静态地从main方法访问字符串a的值。这是有问题的,因为来自main方法的调用不是来自Test1的实例。需要记住的关键一点是,实例变量a与类Test1的每个实例绑定,因为
add()
不是
static
,而
main()
是。尝试打印
t.a
。您正在调用一个非静态变量,该变量为'private int a=1<代码>来自一个静态方法,该方法是main()`method。只需将
private static int a=1你可以看到不同之处。请在提问之前搜索你的问题,因为这个问题已经被问过上千次了。如果您觉得我们真的还需要一个,那么首先搜索并找到之前的规范问题/答案,在您的问题中显示此搜索的结果,并清楚地说明您认为您的问题不同的原因。(1)请格式化您的代码,使其看起来整洁,并且只包含真实的代码(或者,如果您想编写伪代码,请确保您清楚地将其标记为伪代码)。(2)“编辑”标记在这里通常不需要,通常只是在一个问题上增加标记——如果有人关心这个问题过去是问什么的,它在历史记录中是可见的,您可以通过单击“编辑[某段时间]前”的链接来查看在您的问题下方,在您的个人资料图片和用户名旁边。(3)不,您显然不理解差异,因为这种差异导致了此错误。请重新阅读链接问题的答案。OP是否希望该变量成为实例变量而不是您所做的共享变量?本质上,OP是在寻找System.out.println(t.a);您不能在静态Java方法中使用实例变量。当然可以,您只需要一个实例。好的,您是对的。
public static void main(String[] args) {
   Test1 t=new Test1();
   System.out.println(t.a);
}