java中的堆栈是怎么回事?请详细说明。。

—错误的引用逻辑在编译时就可以被发现。在Java中,引用可以理解为一个永远指向对象的指针,Java没有指向指针的指针。关于堆栈的资料几乎每个讲数据结构的书上都有,而至于Java中堆、栈的具体机制你可以参考一些关于Java虚拟机原理的书,不过这个好像比较难理解,我是没指望理解的了。
java中的堆栈是怎么回事?请详细说明。。
Java中堆栈的概念当然是逻辑上的,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的。

什么叫堆?你用十几个麻将牌竖直叠成一摞这叫堆,你可以从上面、下面、中间任意抽出一张牌,也可以任意插入一张。

什么叫栈?AK-47的弹匣就是一个栈,在上面的子弹没被取出之前,你无法取出下面的子弹——尽管你可以从边上的透明部分读出里面装的是什么型号、颜色的子弹。

堆很灵活,但是不安全。对于对象,我们要动态地创建、销毁,不能说后创建的对象没有销毁,先前创建的对象就不能销毁,那样的话我们的程序就寸步难行,所以Java中用堆来存储对象。而一旦堆中的对象被销毁,我们继续引用这个对象的话,就会出现著名的 NullPointerException,这就是堆的缺点——错误的引用逻辑只有在运行时才会被发现。

栈不灵活,但是很严格,是安全的,易于管理。因为只要上面的引用没有销毁,下面引用就一定还在,所以,在栈中,上面引用永远可以通过下面引用来查找对象,同时如果确认某一区间的内容会一起存在、一起销毁,也可以上下互相引用。在大部分程序中,都是先定义的变量、引用先进栈,后定义的后进栈,同时,区块内部的变量、引用在进入区块时压栈,区块结束时出栈,理解了这种机制,我们就可以很方便地理解各种编程语言的作用域的概念了,同时这也是栈的优点——错误的引用逻辑在编译时就可以被发现。

在Java中,引用可以理解为一个永远指向对象的指针,Java没有指向指针的指针。

关于堆栈的资料几乎每个讲数据结构的书上都有,而至于Java中堆、栈的具体机制你可以参考一些关于Java虚拟机原理的书,不过这个好像比较难理解,我是没指望理解的了。2013-12-11
Test t = new Test();给楼主举个简单的例子,上面那句话就是在堆内存开辟了一块空间,里边存折一个new Test();也就是Test的实例。这么说你能懂吗?而栈内存就存放着 t 。上面的例子看不懂的话没关系,我给你举另外一个例子。你去银行存钱的时候不得办个存折或者银行卡吗。银行卡就在栈内存,也就是上面的 t 通过银行卡你可以对你银行里的金额进行操作。而在这里银行就是堆,而你的钱就在堆内存里,也就是上边的 new Test();这么说你该懂了把。2013-12-11
我说个简单的比喻吧!有个吹满气的气球!下面栓了个绳子!堆就好比这个气球!那绳子就是栈!堆:就是存放在硬盘里的一块区域!栈:就是对那块区域的引用!2013-12-11
mengvlog 阅读 30 次 更新于 2025-09-09 08:06:27 我来答关注问题0
  •  翡希信息咨询 java堆、栈、堆栈,常量池的区别,史上最全总结

    Java中的堆、栈、堆栈、常量池的区别如下:一、堆栈 实际含义:老一辈程序员常说的“堆栈”,实际上是栈的意思,只是叫法上连在一起,由于历史原因。栈是一种后进先出的数据结构。 与数据结构的关系:在数据结构领域,堆栈通常指的就是栈。二、栈 定义:栈区是由编译器自动分配释放的内存区域,存放...

  •  文暄生活科普 java堆、栈、堆栈,常量池的区别,史上最全总结

    栈和堆栈,老一辈程序员常说的堆栈,实际上是栈的意思,只是叫法上连在一起,由于历史原因。博主在04年学习数据结构时,书上也是说的堆栈,FILO(先进后出),经常将堆栈与队列,FIFO(先进先出)这两种数据结构进行比较。系统中的堆、栈和数据结构堆、栈不是一个概念。系统中的堆、栈是真实的内存物...

  •  文暄生活科普 浅谈我们常说的堆栈到底是什么(堆?始祖大神咋想的名字)加微信 : touzinv

    Java中分配堆内存是自动初始化的,即在JVM启动时创建。Java中所有对象的存储空间都是在堆中分配的,但这些对象的引用则是在栈中分配,也就是一般在建立一个对象时会分配两部分内存,堆和栈各分配一块。例如:String str = new String("zhangqing");这里面:"zhangqing"表示栈中的一个存储空间中的...

  • 在大部分程序中,都是先定义的变量、引用先进栈,后定义的后进栈,同时,区块内部的变量、引用在进入区块时压栈,区块结束时出栈,理解了这种机制,我们就可以很方便地理解各种编程语言的作用域的概念了,同时这也是栈的优点——错误的引用逻辑在编译时就可以被发现。在Java中,引用可以理解为一个永远指...

  • whatIamdid java中的堆栈问题?

    java中堆栈(stack)和堆(heap)一、堆栈(stack)和堆(heap)?(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部