[英]Can Instance variables be declared at the bottom of the Class?
我認為這是合法的:
public class Test {
private int someValue;
public int myMethod() {
return someValue + anotherValue;
}
private int anotherValue;
}
(是!)
但是,我認為該站點將其描述為“可以在使用之前或之后在類級別聲明實例變量”是一個錯誤。
“在課堂上宣告”這句話是不好的英語語法。
短語“在課堂上”是不明確的。 它可能意味着在類的主體中聲明。 但是,它也可能意味着聲明為“類級”(即static
)變量。 (這是矛盾的,而且不正確,但是...)
短語“使用之前或之后”是不明確的。 它可能意味着在源代碼文件之前或之后。 在時間意義上,它也可能意味着之前或之后。 (那是不正確的。在運行時,在執行方法或構造函數主體中的代碼之前,聲明並初始化對象的所有實例變量。)
盡管他們試圖說的(我認為)是正確的,但他們的表達能力很差,這顯然使一些讀者感到困惑。
實例變量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());
}
}
盡管您的參考文獻很好地解釋了該問題,但為了完整性,我將添加一些細節。
一個實例變量...
public
, protected
, private
或沒有修飾符來表示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.