Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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_Class - Fatal编程技术网

访问其他类中的变量(Java)

访问其他类中的变量(Java),java,class,Java,Class,为什么下面的程序不返回0,因为我正在从一个新的a()访问p,而该a()没有调用main public class A { public static int p = 0; public static void main(String[] args) { p = Integer.parseInt(args[0]); new B().go(); }

为什么下面的程序不返回0,因为我正在从一个新的a()访问p,而该a()没有调用main

 public class A {

         public static int p = 0;

         public static void main(String[] args) {

                p = Integer.parseInt(args[0]);
                new B().go();

            }

        }


       class B {
            public void go() {
                System.out.println(new A().p);
            }
        }

它甚至不应该编译,因为您试图从静态方法分配实例成员。

它甚至不应该编译

可能您将
p
设置为静态,然后更改它。它现在的编写方式无法编译

$ javac A.java 
A.java:7: non-static variable p cannot be referenced from a static context
            p = Integer.parseInt(args[0]);
            ^
1 error

编辑

现在您已经更正了代码,答案是:

此程序不打印0,因为您看到的是第7行中指定的值。在这种情况下,
p
是一个类变量

 p = Integer.parseInt(args[0]);
因此,当您执行时:

 System.out.println(new A().p);

你希望看到
0
认为“新A”将拥有自己的
p
副本,但事实并非如此

此程序无法编译。编译器不允许您从类A的主方法中访问“p”。您不能从静态上下文中访问非静态变量。因此,编译问题将不会按原样编译,因此我不知道它将如何返回任何内容

变量p不能从静态上下文访问,这是它应该说的

如果您设置了p的实例,它应该可以正常工作


对于这一个实验,我会让你有一个公共的非最终成员变量,但再也不会了

EDIT:这只是基于问题的第一次修订的猜测,假设p是非静态的。事实证明,它的意图是它是静态的,所以它得到了错误的一端

尽管存在编译器错误,我假定您的目的是从非静态方法或在a的实例上初始化p

问题是您正在B中创建a的新实例,而不是使用原始实例

为了得到(我相信)你想要的,做一些类似的事情

   public class A {

         public int p = 0;

         public static void main(String[] args) {
                A a = new A();
                a.p = Integer.parseInt(args[0]);
                new B().go(a);
         }

   }


       class B {
            public void go(A a) {
                System.out.println(a.p);
            }
        }

注意,B中的go()方法将A作为参数。没有创建新的实例。

输出是什么?有错误吗?这将无法编译,p是一个成员变量,main是一个静态方法。请尝试在这里发布有效的问题。我想你甚至没有试着检查程序是否会首先编译。在原始代码中,p是静态的。这可能解决了问题。我想删除这个问题,但我不能。乔治:如果你以
0
作为参数运行它,它会打印
0
;)那样的话。。mhhh nevermind:P你可以随时将我的答案标记为已接受,我将投票结束它。谢谢。因此,关键是单词“static”(具有讽刺意味的是,这是我粘贴代码时必须删除的一个单词!)即使将变量“p”定义为静态,线程“main”java.lang.ArrayIndexOutOfBoundsException中仍然存在运行时异常
异常0