導航:首頁 > 安裝方法 > 方法里的變數存在哪裡

方法里的變數存在哪裡

發布時間:2022-01-07 08:06:23

『壹』 java中的方法代碼存在了哪裡

類的實例方法在內存中是只有一份,不過肯定不會是第一個對象中,如果是第一個對象的話,那麼當第一個對象被銷毀的時候,那麼後面的對象就永遠無法調用了...
類的實例方法存在一個專門的區叫方法區,事實上類剛裝載的時候就被裝載好了,不過它們在"睡眠",只是這些方法必須當有對象產生的時候才會"蘇醒".(比如,一個輸出類的成員變數的方法,如果連對象都沒有,何來的輸出成員變數).所以,方法在裝載的時候就有了,但是不可用,因為它沒有指象任何一個對象。

而靜態的又不一樣了,靜態的東西存在靜態區,他們和類是一個等級的,就是說只要類被裝載,它們就可以直接用.(用類名來調用).他們不依賴與任何對象,所以也不能輸出任何對象的成員屬性.(除非成員屬性也是靜態的).

而你最後的一句話也是錯的,"類的所有數據在內存中只有靜態的才又空間".
當然不是,每個對象在new的時候都會在堆區中開辟內存,用來保存對象的屬性和方法.(實際上方法保存的只是方法區的引用,如果保存的是方法本身,那麼試想一下,有多少個對象就得有多少個方法,那麼又和第一點中"實例方法在內存中只有一份拷貝"相矛盾了)

好了,事實上內存圖很復雜和麻煩,算比較深的東西了,很多用JAVA多年的人也不太了解其原理,因為開發也不要用..

更多的問題可以去遠標培訓去問技術老師。

『貳』 在java里一個方法內部定義的變數比如說方法的參數還有方法體內定義的變數是不是放在棧內存中

是的,在棧中。如果是類成員變數放在堆中

『叄』 c語言中的函數體存儲在哪和變數的處理方式一樣嗎

現代計算機都是存儲程序的馮-諾伊曼計算機,所有的程序,數據等都一視同仁,全部以相同的方式存儲在計算機里,需要的時候再讀入,所以函數體跟變數存儲的方式是一樣的,在內存中都是二進制代碼,並不區分所謂的函數題還是變數,只是在你編譯的時候,編譯器會主動幫你區分函數體和變數,就是這樣~~希望對你有幫助哦~~

『肆』 JAVA中類中的方法存儲在什麼地方

類載入時 方法信息保存在一塊稱為方法區的內存中, 並不隨你創建對象而隨對象保存於堆中。可參考《深入java虛擬機》前幾章。
另參考(他人文章):
如果instance method也隨著instance增加而增加的話,那內存消耗也太大了,為了做到共用一小段內存,Java 是根據this關鍵字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在傳遞給對象參數的時候,Java 編譯器自動先加上了一個this參數,它表示傳遞的是這個對象引用,雖然他們兩個對象共用一個方法,但是他們的方法中所產生的數據是私有的,這是因為參數被傳進來變成call stack內的entry,而各個對象都有不同call stack,所以不會混淆。其實調用每個非static方法時,Java 編譯器都會自動的先加上當前調用此方法對象的參數,有時候在一個方法調用另一個方法,這時可以不用在前面加上this的,因為要傳遞的對象參數就是當前執行這個方法的對象。

『伍』 java中 static變數和方法到底是存在內存什麼區域

JVM內存總體一共分為了
4個部分(stack segment、heap segment、code segment、data segment)
當我們在程序中,申明一個局部變數的時候,此變數就存放在了 stack segment(棧)當中;
當new 一個對象的時候,此對象放在了heap segment(堆)當中;
而static 的變數或者字元串常量 則存在在 data segment(數據區)中;
那麼類中方法的話,是存在在 code segment(代碼區)中了。

『陸』 java虛擬機將方法中的局部變數包括類類型的局部變數存放在什麼區啊

基本類型是存在棧中
非通過new創建的字元串對象是存在jvm的字元池中
其餘的都存放在堆中

『柒』 java非靜態成員變數中的基本變數到底存在哪裡

其實我覺得書上就想說:基本數據類型創建的值存在棧內存中,引用數據類型的值存在堆內存中,

配合上圖詳解:基本數據類型 int i=3;就是在棧內存中開個房子給 i,名字叫 i , 裡面住著 3 。而 引用數據類型 String str="abc" 就是棧內存給它開後院,叫 str 去 堆內存地址為 0x2253的地方去住,所以引用類型的值存在 堆內存中,而棧內存中存的是它住的房號,也就是值所在的堆內存地址。

這樣說不知道你能不能理解。但我想說:圖自己畫的,文字自己敲的,如果有錯,請尊重回答者。

『捌』 函數局部變數到底存在什麼位置

存在於它具體的函數參數中,定義於第一個具體的x或y的具體值。總的來說就是局部變數是函數內部定義的變數,其作用域是所在的函數。如果函數外還有一個跟局部變數名字一樣的變數,
程序會認為它們兩個是完全不同的兩個變數。當退出函數的時候,其中的局部變數就同時被清除。如果你問的電腦的話上可以跳過,那是電析幾何學的,電腦的話 局部變數是放在棧裡面的,但是訪問局部變數並不需要出棧,局部變數是通過棧偏移量直接訪問的,函數返回時該函數的整個棧空間被回收。希望能幫到你。

『玖』 java 變數名存儲在哪裡

首先聲明一下一樓說的觀點有誤,對於棧和堆這里就不說了。
對於基本類型數據來說:
1) 局部變數
$范圍:定義在一個方法內部的變數;
$作用域:其作用域為所在代碼塊,也稱為臨時變數、棧變數;
$生命周期:從創建開始到方法(函數)結束為止;
$特點:在使用之前必須要對其初始化;
$一律存放在棧中。
2) 實例變數
$范圍:定義在一個類內部但不在方法中的變數;
$作用域:其作用域為整個類,能夠被操作的范圍是類的內部;
$生命周期:對象被創建的時候開始,對象被垃圾回收的時間結束;
$特點:如未定義其初值,系統會自動對實例變數進行默認初始化(默認值為null),使用之前必須創建類的實例;
$每一個對象的實例變數的值是相互獨立的;
$一律存放在堆中。

對於復雜類型來說:
引用存放在棧中,而其所指向的值存放在堆中。

回答補充:我的以上陳述已經回答了你的問題,是你沒有看懂而已,當然不用了!

『拾』 java中成員變數放在哪

java中成員變數放在class類名下一行,如下位置:

packagecom.qiu.lin.he;

publicclassCeshi{
privatefinalinti=1;//成員變數的位置
privatefinalStringstr=null;

publicstaticvoidmain(String[]args){
char[]chars=newchar[1];
Stringstr="ABCDE1234";
chars[0]=str.charAt(0);
Stringtemp=newString(chars);
if(chars[0]>='A'&&chars[0]<='Z'){
System.out.println(str.replaceFirst(temp,temp.toLowerCase()));
}
}
}

閱讀全文

與方法里的變數存在哪裡相關的資料

熱點內容
研究光路可逆時用到的是什麼方法 瀏覽:851
車厘子治療鼻炎的方法 瀏覽:798
怎麼自釀青葡萄酒的方法 瀏覽:742
簡便電腦使用方法 瀏覽:125
定量定向的研究方法 瀏覽:701
拯救者電腦設置u盤啟動方法 瀏覽:391
研究方法有影視鑒賞法 瀏覽:72
用快捷鍵恢復出廠設置在哪裡設置方法 瀏覽:50
形體分析法和其他識圖方法 瀏覽:421
簡單的內功修煉方法 瀏覽:691
生態酒鑒別方法 瀏覽:422
競猜答案的方法和技巧 瀏覽:855
冠心病中醫治療方法養生堂 瀏覽:14
59乘以49哪種方法更簡便 瀏覽:403
常用的去魚腥的方法 瀏覽:72
腰肌腱炎鍛煉方法 瀏覽:406
手機膠刀修復方法 瀏覽:938
有什麼可以使人快速醒酒的方法 瀏覽:323
甲狀腺超聲檢測方法 瀏覽:386
敦煌壁畫風化解決方法 瀏覽:634