A. java如何實現堆棧
//這是JDK提供的棧
import java.util.Stack;
public class UsingStack {
public static void main(String[] args) {
//構造棧對象,使用類型限制,只能存儲Integer數據
Stack<Integer> s = new Stack<Integer>();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
//這是我寫的順序結構的棧
import java.util.EmptyStackException;
import java.util.Vector;
public class UsingStack{
public static void main(String[] args){
//構造棧對象,使用類型限制,只能存儲Integer數據
MyStack<Integer> s = new MyStack<Integer>();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
/**
* 棧類
* @author developer_05
* @param <T>
*/
class MyStack<T> extends Vector<T>{
/**
* 構造方法
*/
public MyStack(){
}
/**
* 入棧方法
* @param item 待入棧的元素
* @return 返回入棧的元素
*/
public T push(T item) {
addElement(item);
return item;
}
/**
* 出棧方法(同步處理)
* @return 返回出棧元素
*/
public synchronized T pop() {
T obj;
int len = size();
if (len == 0)
throw new EmptyStackException();
obj = elementAt(len - 1);
removeElementAt(len - 1);
return obj;
}
/**
* 判斷棧是否為空的方法
* @return 返回true(棧空)或false(棧非空)
*/
public boolean empty() {
return size() == 0;
}
private static final long serialVersionUID = 1L;
}
B. java堆棧是什麼意思
簡單的說:Java把內存劃分成兩種:一種是棧內存,一種是堆內存。
在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧內存中分配。當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java會自動釋放掉為該變數所分配的內存空間,該內存空間可以立即被另作他用。
堆內存用來存放由new創建的對象和數組。在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於數組或對象在堆內存中的首地址,棧中的這個變數就成了數組或對象的引用變數。引用變數就相當於是為數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變數來訪問堆中的數組或對象
C. java 堆棧問題
獻丑了:
1、java中所有變數(包括你上述提及的str引用類型變數)的存放位置都取決於該
變數的聲明位置,而New出的對象則始終被JVM存放在堆中,創建的字串常
量則始終被JVM存放在數據段區常量池中。
2、你對第一個str引用變數存放位置的解釋有一點欠妥的地方,准確的說這個
str的存放位置不一定在棧中,這要看str的聲明位置,如果str是方法參數中
聲明或方法內局部變數聲明則存放位置就是你說的在棧中,但如果在類的成
員變數中聲明則是存放於堆中。「abc」是一個字串常量被存放於常量池中而
該常量返回的引用地址被存放於str變數中,str變數的位置取決於str的聲明
位置。
3、第二種方式String str = new String("abc");其實上是創建了兩個對象,
與上述相同,字串常量對象被放在常量池中,這個常量「abc」與上面第一個
創建的「abc」是同一個abc,常量池中不能保存相同面值的常量,而New出的
新對象new String("abc")則存放在堆中,這里的「abc」的位置存在於堆
中,與上述常量池中的「abc」不是同一個「abc」,這里一定要注意啊,而
str變數的存放位置與第一個str的存放位置都是取決於該str的聲明位置。
4、解釋引用變數存放位置的原理:對象在創建時將為所有的成員變數分配內存
空間以及為所有的成員方法分配入口地址,因為對象是對屬性及方法的封裝
而對象在創建時被分配到堆中的空間,因此成員變數被分配在堆中,而方法
時在調用時為局部參數或變數臨時分配內存空間,在此,方法在調用時被JVM
線程載入至棧中,於此局部變數及參數的所在位置存在與棧中,這些局部變
量及參數所佔空間是臨時的,一旦方法調用結束其臨時空間將被釋放,所以
內存棧區空間是為變數分配的臨時存貯空間,這個你可以參考馬士兵的堆棧
視屏教程,他講述的很清楚,我可能還沒有他表達得清楚。
5、最後再強調一點:變數不是都放在棧中,這取決於該變數的聲明位置,我的
這種說法你能理解嗎?只有理解了這一點,在出現堆棧問題或緩存遺留問題
時才能根據問題的出發點找到問題的出處。
D. JAVA中堆棧是什麼
= = 樓上的,樓上問的是JAVA的堆棧啊...
JAVA有struct這種東西,這玩笑開大了吧...
別用題目的一個的關鍵詞,然後找一堆內容硬套上去好不好~~~
堆棧是什麼,樓上的都說了...
在JAVA上,如果是J2ME上的話,就是可用內存...
如手機,在手機上的RAM與ROM都算是內存,但在運行JAVA程序時,
程序能操作的內存只能是系統劃分的堆棧空間....
E. java 中的堆棧是什麼
首先堆棧是計算機為程序分配的內存空間,用來存儲數據的。
在java中因為我們不直接操作內存,所以並不需要考慮指針的問題
在java中堆和棧也是用來存儲數據,其中棧存儲的引用,堆存儲的對象
如:Student s = new Student("張三");
s在棧中 張三在堆
F. java中的「堆棧」是什麼意思
堆棧是計算機為程序分配的內存空間,用來存儲數據的。
G. java中的堆棧詳解
簡單的說 其實 棧 就是存放變數引用的一個地方, 堆 就是存放實際對象的地方 也就是.
比如: int i = 7; 這個 其實是存在棧里邊的。內容為 i = 7。
Apple app = new Apple(); 這個 app 是在棧里邊的 他對應的是一個內存地址也在堆里邊, 而這個內存地址對應的是堆里邊存放 Apple 實例的地址。
String s = "Hello World!"; 這個其實是存在另外一塊靜態代碼區。
總體來說: 棧--主要存放引用 和基本數據類型。
堆--用來存放 new 出來的對象實例。
H. Java中什麼叫堆棧
和別的一樣啊,就是後進去的先出來!
I. 求java 裡面「堆棧」的簡單解釋,通俗例子!
java堆棧類源程序import java.util.LinkedList;import java.io.*;import java.util.NoSuchElementException;/** * * @version 1.00 06/12/19 */public class MStack { LinkedList list; public MStack() { list=new LinkedList(); } public static void main(String[] args) { MStack MStack=new MStack(); MStack.push("ok"); MStack.push("i am ok"); System.out.println(MStack.pop()); System.out.println(MStack.pop()); System.out.println(MStack.pop()); } //彈出元素 public Object pop() { try { Object o=list.getFirst(); list.removeFirst(); return o; } catch(NoSuchElementException e) { //System.out.println(e); return null; } } //壓入元素 public void push(Object o) { list.addFirst(o); } //得到棧頂元素 public Object getTop() { if(list.size()!=0) { return list.getFirst(); } else { return null; } } }Junit測試程序import junit.framework.*;public class TestMStack extends TestCase{ MStack s=new MStack(); public TestMStack(String name) { super(name); } public void setUp() { } public void testCase1() { MStack MStack=new MStack(); s.push("ok"); MStack.push("ok"); Assert.assertEquals(s.getTop(),MStack.getTop()); } public static void main(String[] args) { junit.textui.TestRunner.run(TestMStack.class); } }// http://blog.csdn.net/wfisone/archive/2009/05/09/4163778.aspx
J. java堆棧是啥
簡單的說:Java把內存劃分成兩種:一種是棧內存,一種是堆內存。
在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧內存中分配。當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java會自動釋放掉為該變數所分配的內存空間,該內存空間可以立即被另作他用。
堆內存用來存放由new創建的對象和數組。在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於數組或對象在堆內存中的首地址,棧中的這個變數就成了數組或對象的引用變數。引用變數就相當於是為數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變數來訪問堆中的數組或對象。