簡體   English   中英

訪問其他類中的變量(Java)

[英]Accessing variables in other classes (Java)

為什么下面的程序沒有返回0 ,因為我從一個新的A()訪問p ,它沒有主要的調用?

 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的main方法中訪問“p”。您無法從靜態上下文中訪問非靜態變量。 因此匯編問題

那不會按原樣編譯,所以我不知道它會如何返回任何東西。

無法從靜態上下文訪問變量p是它應該說的。

如果設置p的實例,它應該可以正常工作。

PS。 對於這個實驗,我會讓你有一個公共的非最終成員變量,但永遠不會!

編輯:這只是基於問題的第一個修訂的猜測,假設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作為參數。 沒有創建A的新實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM