簡體   English   中英

實例變量可以在類的底部聲明嗎?

[英]Can Instance variables be declared at the bottom of the Class?

當我看到“實例變量可以在使用之前或之后在類級別聲明”時,我遇到一個問題 在站點java_variable_types中

我不明白什么是課程級別以及該序列的含義。

我認為這是合法的:

 public class Test {
    private int someValue;

    public int myMethod() {
        return someValue + anotherValue;
    }

    private int anotherValue;
 }

(是!)

但是,我認為該站點將其描述為“可以在使用之前或之后在類級別聲明實例變量”是一個錯誤。

  1. “在課堂上宣告”這句話是不好的英語語法。

  2. 短語“在課堂上”是不明確的。 它可能意味着在類的主體中聲明。 但是,它也可能意味着聲明為“類級”(即static )變量。 (這是矛盾的,而且不正確,但是...)

  3. 短語“使用之前或之后”是不明確的。 它可能意味着在源代碼文件之前或之后。 在時間意義上,它也可能意味着之前或之后。 (那是不正確的。在運行時,在執行方法或構造函數主體中的代碼之前,聲明並初始化對象的所有實例變量。)


盡管他們試圖說的(我認為)是正確的,但他們的表達能力很差,這顯然使一些讀者感到困惑。

實例變量val在第2行中聲明(請注意標記),但甚至在第1行中也已引用。 您可以從第3行和第2行注釋中刪除注釋。 然后它也會起作用。

這意味着變量val在第1行中使用,甚至在聲明之前使用,如果第2行考慮在第3行考慮之后使用。

public class prog{
     //private  int val; //line# 3
      public  int getVal()
       { 
          return val;//line# 1
       }
        private  int val; //line# 2
        prog()
        {
           val=0;
        }
        public static void main( String [] args)
        {
            prog obj= new prog();
            System.out.println("val:"+obj.getVal());
        }
    }

盡管您的參考文獻很好地解釋了該問題,但為了完整性,我將添加一些細節。


一個實例變量...

  • 在班級聲明
  • 可以具有必要的任何可見性( publicprotectedprivate或沒有修飾符來表示package-private)
  • 將收到一個初始值實例化之后(也就是,你不必來實例字段的值...但是,如果你不實例化一個參考值,你可能會碰到一個NullPointerException

短語“使用前或使用后”沒有多大意義,但讓我們舉例說明一種情況:

public class Foo {
    private String word;

    public void printTheWord() {
        System.out.println(word);
    }
}

word尚未實例化,但是我們可以使用它,因為它收到的初始值為null 這意味着我們不會獲得我們想要的值,但是編譯。

將此與局部變量進行對比。 由於未實例化word因此以下代碼無法編譯。

public class Foo {
    public void printTheWord() {
        String word;
        System.out.println(word);
    }
}

短語“使用之前或之后”。 意味着實例變量(適用於整個類)與局部變量不同,局部變量僅在該方法內部受到限制。

可以在類的開頭聲明或初始化它,這通常是最可能的方法。 在類內部的other,可以在使用它的方法調用之后進行聲明。

請找到以下代碼片段以理解該短語:

public class InstanceVariable {

    //declared before
    int foo=4;
    public void testInstanceVariableUse(){
        System.out.println("The total value of the instance variable is "+ (foo+boo));
    }
    //declared after        
    int boo=5;
}


class TestInstanceVariable{
    public static void main(String[] args){
        InstanceVariable instanceVar = new InstanceVariable();
        instanceVar.testInstanceVariableUse();
    }
}

輸出:實例變量的總值為9

暫無
暫無

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

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