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压入栈,通过局部变量表,找到对应的【实例数据】,执行完毕后释放。