java類存儲
2、堆棧(棧)位於通用RAM(隨機訪問存儲器)中,但是通過堆棧指針可以直接從堆棧指針那裡獲得直接支持。堆棧指針向下移動,則分配新的內存;向上移動,則釋放那些內存。其快速有效性僅次於寄存器。創建程序時,JAVA必須知道存儲在堆棧區的所有項的確切生命周期,以便上下移動堆棧指針。比如,JAVA對象引用存儲於堆棧區,但對象並不存儲於其中。3、堆一種通用的內存池(也位於RAM區),用於存放所有的JAVA對象。堆不同於堆棧的好處是:編譯器不需要知道存儲的數據在堆里存活多長時間,因此堆里分配存儲有很大的靈活性。當需要一個對象時,只需要new一個即可,當執行這行代碼時,會自動在堆里進行存儲分配。不過,用堆進行存儲分配和清理可能比用堆棧進行存儲分配需要更多的時間。4、常量存儲常量值通常在直接放在程序代碼內部,這樣做是安全的,因為它永遠不會被改變。5、非RAM存儲如果數據完全存活於程序之外,那麼它可以不受程序的任何控制,在程序沒有運行時也可以存在。流對象:在流對象中,對象轉成位元組流,通常被發送給另外一台機器。持久化對象:對象被存放於磁碟上。
⑵ 在java類中如何實現信息的存儲
package com.ctx0331;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 實現文件的讀取和寫入
*
* @author Administrator
*
*/
public class FileUtil {
public static void main(String[] args) throws IOException {
byte[] datafile = loadFileData("./tempdata/abc.txt");
System.out.println(new String(datafile));
String str = "寫入文件";
String outpath = "./tempdata/out.txt";
saveDataToFile(outpath, str.getBytes());
}
/**
* 讀取指定路徑的文件內容
*
* @param fileName
* @return data
* @throws IOException
*/
public static byte[] loadFileData(String fileName) throws IOException {
byte[] data = new byte[1024];// 用於存儲讀取的文件內容
File file = new File(fileName);
if (file.exists()) {
FileInputStream fis = new FileInputStream(file);
fis.read(data);
fis.close();
} else {
System.out.println("文件不存在");
}
return data;
}
/**
* 向指定路徑的文件寫入data中的內容
*
* @param fileName
* @param data
* @throws IOException
*/
public static void saveDataToFile(String fileName, byte[] data)
throws IOException {
File file = new File(fileName);
if (!file.exists()) {// 文件不存在就創建
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
}
}
⑶ java的類在剛定義好還沒有new的時候它在內存中存放在什麼地方
關於new 出來的問題,樓上的都回答了.那麼java的類定義完了之後在哪裡呢.當然在一般的存儲介質上啦.就是硬碟上.在沒有被相關代碼載入之前它一直就在那裡待著.
現在有這么些情況,你要new一個新的對象.
這個時候JVM會把你那個類的class載入到內存當中.載入完了.JVM會看你的代碼有沒有錯.沒有錯的話.JAVA的解釋器就會去一行行的讀你的代碼.當然,這個時候讀的代碼是聲明屬性和構造函數等代碼.這個時候他通過你的聲明屬性代碼和構造函數就可以知道給你分配多少內存空間,並且也知道給他們初始值.
這個是普通情況,有靜態屬性的情況又不一樣.
⑷ java一個類在內存中是如何存儲的
關於您提出的問題,網路也有過這樣的回答了.那麼java的類定義完了之後在哪裡呢.當然一般一個類,當你沒有new的時候,也就是說並沒有在內存中分配地址,所以就像你說的無處存
⑸ java中一個類的方法是怎麼存儲的
java內存分析:
都是將內存分為三塊
第一塊內存區域是:棧
第二塊內存區域是:堆
第三塊內存區域是:方法區
棧空間里裝的都是局部變數
堆空間里裝的都是new出來的東西,特殊的對象 (非static修飾的全局變數是特殊的對象,在堆內存區域內)
方法區里裝的都是基本類型常量和字元串常量、static修飾的全局變數、代碼
⑹ JAVA中類中的方法存儲在什麼地方
類的實例方法在內存中是只有一份,不過肯定不會是第一個對象中,如果是第一個對象的話,那麼當第一個對象被銷毀的時候,那麼後面的對象就永遠無法調用了...
類的實例方法存在一個專門的區叫方法區,事實上類剛裝載的時候就被裝載好了,不過它們在"睡眠",只是這些方法必須當有對象產生的時候才會"蘇醒".(比如,一個輸出類的成員變數的方法,如果連對象都沒有,何來的輸出成員變數).所以,方法在裝載的時候就有了,但是不可用,因為它沒有指象任何一個對象。
⑺ 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時存放類中的方法.
⑻ JAVA集合類存儲的是一個對象的哪部分
一個對象有屬性有方法,new這個對象的時候內存中就存在了這個對象,這個對象在內存中有一個地址方便我們找到他。那麼向一個集合中添加這對象的時候其實是添加這個對象在內存中的地址。也就是說我們在遍歷集合的時候其實是挨個查看這個集合中的地址。
那麼,也就是說,通過這個地址我們就能找到你之前new的那個對象,從而對這個對象進行操作。
所以說,你的問題「存儲的是對象的哪一部分」這種說法是完全錯誤的。
當然,有一種情況是例外,就是你寫了一個集合的子類,重新實現了這個集合添加元素的方法,改為了添加某一種類型的某個欄位。這時候才可以說這個集合存儲的是那個對象的某一個屬性。不過這種說法不嚴謹,因為集合只能存對象類型,就算你放基本數據類型進去JDK1.6以上也會自動幫你包裝成對應的對象類型然後存進去。其實存的還是對象。這個對象還是有對應的屬性和方法。
所以,總結下來,你的問題那句話在大部分情況下是錯誤的,在特殊情況下是不嚴謹的。