public static student[] arr = new student[10];
現在,學生是有一些實例變量name(String)
和age(int)
類。 我想知道,只要這條線被執行會發生什麼? 所有的十個參考文件是否會得到內存,或者我必須單獨分配它們?如果試圖訪問student[5].age
會怎麼樣? 我需要知道的內存分配狀態。謝謝...............
public static student[] arr = new student[10];
現在,學生是有一些實例變量name(String)
和age(int)
類。 我想知道,只要這條線被執行會發生什麼? 所有的十個參考文件是否會得到內存,或者我必須單獨分配它們?如果試圖訪問student[5].age
會怎麼樣? 我需要知道的內存分配狀態。謝謝...............
是
public static student[] = new student[10];
一旦該行執行,JVM
分配內存爲10名學生references
。請看official docs on Arrays,看流量。
// declares an array of integers
int[] anArray;
// allocates memory for 10 integers
anArray = new int[10];
// initialize first element
anArray[0] = 100;
將所有十個引用獲取內存或I必須分配然後單獨?
您將獲得10個參考的空間。這些引用將被初始化爲null
。如果你想讓它們設置爲除null
之外的其他任何內容,則必須單獨執行。
public static student[] arr = new student[10];
會爲10名學生分配內存。這些內存填充null。
所以,你不能訪問student[5].age
,因爲對實際對象的引用不存在。
我們需要單獨創建一個像下面
for(int i=0;i<10;i++){
student[i]= new Student();
}
,如果你正在創建的實際對象的引用,你將與NullPointerException異常結束前訪問學生[5]。年齡的對象引用。
當執行上面的語句,JVM將創建10個連續的存儲器位置中,每個大到足以容納參照student
。但是,如果您願意,該陣列將不包含引用或null
。當您執行的語句像arr[0] = new student();
一個student
對象將在堆上創建,其引用將被保存在arr[0]
。請記住,數組也分配在堆上。
所以一旦你創建10個student
對象,將各自的地方堆上分配的,但是當你創建對象的數組,它們的引用將被存儲在arr
僅供參考變量將被創建。在你的案例中引用學生類的變量。
在下面的圖像,一組參考變量的被創建。然後,您可以 指向那些參考變量,以實際的對象,後來。
這是什麼書? –
當我出現oracle java認證時,我讀了這本書。 http://www.amazon.com/SCJP-Certified-Programmer-Java-310-065/dp/0071591060 – Sorter
爲什麼你不試試看看會發生什麼? –
但我不能看到內存分配的東西:( – Marwadi
對象是否*永遠*存儲在堆棧通常很難確定。請參閱http://stackoverflow.com/questions/2787611/why-does-java-uses -heap-for-memory-allocation – Raedwald