java存儲對象
stack 區存放函數參數和局部變數;
heap 區存放對象;
data 區存放static 的變數或者字元串常量;
code 區存放類中的方法;
stack 棧 -->放方法的參數 和局部變數.就像這樣
-----------
void test(String[] args){
int xx = 0;// args和 xx在jvm load class時存放在棧中
}
heap 堆 --> 堆要比棧要大得多. 當一個對象對new出來時,該對象放在heap中,對象引用放在棧中.
data區,也就是數據區 -->靜態的變數 和 string的常量.
code 代碼區 --->classloader類載入器載入該class時存放類中的方法.
B. java如何將許多對象存儲在一個更大概念的對象裡面
這里你採納與否沒關系,給你說說編程與內存的關系。你定義的任何變數,常量,類,方法等等,其實都在內存中,沒有所謂的把數據存內存中,這概念,你可以想一下電腦重啟或關機後,內存中的所有數據,都會丟失,除非你保存到磁碟中去。在內存中的數據有兩塊,第一、緩沖,一般寫數據到磁碟的時候開辟出來的內存空間;第二、緩存,一般是從磁碟讀數據到內存中開辟出來的內存空間。會這么使用,原因很簡單,磁碟讀寫數據速度與內存不一致(磁碟的存取效率遠遠小於內存的存取效率),為了提高數據的存取效率,才會這么乾的。一般而言,java中的所謂數據,大部分都是類,從自動引用計數的概念來分析,你想把對象長久的放在內存中,不會被垃圾回收機制釋放,注意制葯有一個對象在使用/引用你的數據,這條數據就會存在內存中。所以,想servlet中的全局配置參數,隨時可以取到還是唯一一份,你可以參考一下。另外內存使用分堆與棧,堆在面向對象編程中存儲對象的,棧是方法或函數執行的時候臨時開辟的存儲空間,方法或函數執行完畢就會釋放。希望我的回復能幫助到你,採納與否沒關系。有更好的答案,我就隱藏我的回復。
C. java 用集合存儲對象 怎麼寫
看來兄弟沒怎麼接觸過java啊!
Java API中所用的集合類,都是實現了Collection介面,他的一個類繼承結構如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
集合類中可以放任何類型數據的
比如一個Student類
Student stu;
List list;
list.add(stu);
liste.get();就可以獲取
HashMap hm;
hm.put("stu",stu);
Student s = (Student)hml.get("stu");就可以獲取這個對象。
好好學習
跟對象沒有關系的。
D. 有個小小的java問題,請問在java中數組可以儲存對象嗎如果可以儲存的話,那可以再調用儲存在
java中數組可以存儲對象
public class Test14 {
public static void main(String[] args) {
Book[] book = new Book[3];
book[0] = new Book("java編程思想","Bruce Eckel",108);
book[1] = new Book("菜根譚","洪應明",58);
book[2] = new Book("百年孤獨","加西亞·馬爾克斯",108);
for(int i=0;i<book.length;i++){
System.out.println(book[i].getName()+"\t"+book[i].getAuthor()+"\t"+book[i].getPrice());
}
}
}
class Book{
private String name;
private String author;
private double price;
public Book(){
}
public Book(String name, String author, double price) {
this.name = name;
this.author = author;
this.price = price;
}
public String toString() {
return "Book [author=" + author + ", name=" + name + ", price=" + price
+ "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
E. java怎麼把一個對象存到List里
1、可以通過list的add方法來進行添加,可以通過get方法獲取到數據內容(即可是任何對象)。
2、實體類型如果為數組的話,可以直接通過list的add方法進行添加轉換,舉例List<Object> list = new ArrayList<Object>(),定義一個數組類型的list對象String entity = new String[("1232"),創建一個要實體化的數組對象list.add(entity ),給list對象賦值,這樣就完成了對象的轉換可以獲取到list的數據:list.get(0),結果就是entity對象(實際此對象是字元串)。
3、因為Object類型是任何對象類型的父類,所以不需要強制轉換即可完成添加。
F. Java中數組對象的存儲位置
原帖地址:http://hi..com/sqldebug/blog/item/9758b9ffa605e51a09244d91.html
數組單一說在棧中還是堆中都是錯誤的,分為幾種情況:
1、固定數組在函數體內分配是在棧中的
我們做一個試驗,一般DELPHI程序線程的棧大小是1M,如果我們函數體中申請4M大小的數組,報棧溢出,則表示數據的大小是在棧中的。
const
CArrayCount = 1024*1024*4;
procere TForm1.btnMainThreadClick(Sender: TObject);
var
MainThreadArray: array[1..CArrayCount] of Char;
i: Integer;
begin
for i := Low(MainThreadArray) to High(MainThreadArray) do
MainThreadArray[i] := #0;
end;
我把以上代碼在主線程中測試時,確實報了棧溢出,如果這時你把DELPHI程序的棧調大為6M則正確,表示在函數體中申請的數組是在棧中的。
2、固定數組在類中分配是在堆中的
我們在類中加一下定義語句
FFixArray: array[1..CArrayCount] of Char;
程序正常,表示在類中分配固定數組是在堆中的。
3、固定數組全局變數是在堆中的
我們在程序定義全部數組
GFixArray: array[1..CArrayCount] of Char;
程序也正常,表示全局固定長度是在堆中的。
3、動態數組不管在函數體中、類中、全局變數都是在堆中
如果你會匯編,看一下匯編就明白了。DELPHI這么實現是合理的,在函數里中分配的固定長度數組放在棧中可以加快運行效率,而且在多線程的情況下,不用像堆分配有加鎖。只是大家在寫程序的過程中注意在函數里定義太長的數組需要注意,否則棧溢出,程序就崩潰了。
G. java的方法中new的對象存儲在內存中那個區域
這個對象存在堆中,還是棧中?
答:堆,new一個對象,一定是在堆中
方法內部new出來的對象,在哪裡存著?
答:堆,new出來對象的實例變數都存在堆上面。
棧,這個東西,需要理解為:線程運行時,才會創建,執行完,就沒了。
Person p = new Person();
上面這段代碼,在執行時,p壓入棧,通過局部變數表,找到對應的【實例數據】,執行完畢後釋放。