引用傳遞-.ppt_第1頁
引用傳遞-.ppt_第2頁
引用傳遞-.ppt_第3頁
引用傳遞-.ppt_第4頁
引用傳遞-.ppt_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、內(nèi)存分析引用傳遞,Java中的內(nèi)存,一般Java在內(nèi)存分配時會涉及到以下區(qū)域: 寄存器:我們在程序中無法控制 棧:存放基本類型的數(shù)據(jù)和對象的引用,但對象本身不存放在棧中,而是存放在堆中 堆:存放用new產(chǎn)生的對象和數(shù)組 靜態(tài)域:存放在對象中用static定義的靜態(tài)成員 常量池:存放常量,棧與堆,在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。 當(dāng)在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內(nèi)存空間,當(dāng)超過變量的作用域后,Java會自動釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。 堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組。 在堆中分配的內(nèi)存,

2、由Java虛擬機(jī)的自動垃圾回收器來管理。 在堆中產(chǎn)生了一個數(shù)組或?qū)ο蠛?,還可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,棧中的這個變量就成了數(shù)組或?qū)ο蟮囊米兞?。(引用變量就相?dāng)于是 為數(shù)組或?qū)ο笃鸬囊粋€名稱,以后就可以在程序中使用棧中的引用變量來訪問堆中的數(shù)組或?qū)ο?。?數(shù)組和對象在沒有引用變量指向它的時候,才變?yōu)槔?,不能在被使用,但?然占據(jù)內(nèi)存空間不放,在隨后的一個不確定的時間被垃圾回收器收走(釋放掉)。 實際上,棧中的變量指向堆內(nèi)存中的變量,這就是Java中的指針!,返回,內(nèi)存分析1-Person類,public class Person Str

3、ing name;/ 表示人的姓名 int age ;/ 表示人的年齡 public void tell()/ 定義說話的方法 System.out.println(姓名: + name + ,年齡: + age) ; public static void main(String args) Person per1 = null ;/ 聲明對象 Person per2 = null ;/ 聲明對象 per1 = new Person() ;/ 實例化對象 - per2 = per1 ; Person per3 = new Person() ;/ 實例化對象 - = 張三 ;

4、/ 為名字賦值 per1.age = 30 ;/ 為年齡賦值- per2.age = 100; - per1.tell() ;/ 調(diào)用方法 per2.tell() ; per3.tell() ; ,內(nèi)存分析1-Person類,棧內(nèi)存,堆內(nèi)存,Person per1 = null ;/ 聲明對象 Person per2 = null ; per1 = new Person() ;/ 實例化對象,per1,name=null age=0,per2,棧內(nèi)存,堆內(nèi)存,per1,name=null age=0,per2,per2 = per1 ; per3 = new Person() ;/ 實例化對象

5、,棧內(nèi)存,堆內(nèi)存,per1,name=“張三” age=30,per2, = 張三“ per1.age = 30 ;,棧內(nèi)存,堆內(nèi)存,per1,name=“張三” age=100,per2,per2.age = 100 ;,name=null age=0,per3,name=null age=0,per3,name=null age=0,per3,內(nèi)存分析例子2,class Demo int x = 10 ; ; public class TestDemo public static void main(String args) Demo d = new Demo() ; d

6、.x = 22 ; fun(d) ; System.out.println(d.x) ; public static void fun(Demo temp) temp.x = 55 ; ;,內(nèi)存分析例子2,棧內(nèi)存,p,堆內(nèi)存,對象,x=10,Person p = new Person,棧內(nèi)存,p,堆內(nèi)存,對象,x=22,p.x=22,棧內(nèi)存,p,堆內(nèi)存,對象,x=22,fun(Person temp),temp,棧內(nèi)存,p,堆內(nèi)存,對象,x=55,temp.x=55,temp,值傳遞與引用傳遞,值傳遞: 方法調(diào)用時,實際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù),方法執(zhí)行中形式參數(shù)值的改變不影響實際參

7、數(shù)的值。(發(fā)生改變的只是實參的備份,方法調(diào)用完畢后備份自動消失。) 引用傳遞: 也稱為傳地址。在方法執(zhí)行中,對形式參數(shù)的操作實際上就是對實際參數(shù)的操作,方法執(zhí)行中形式參數(shù)值的改變將會影響實際參數(shù)的值。 方法調(diào)用時,實際參數(shù)的引用(地址,而不是參數(shù)的值)被傳遞給方法中相對應(yīng)的形式參數(shù), 值傳遞-傳遞基本數(shù)據(jù)類型參數(shù)。 引用傳遞-引用數(shù)據(jù)類型作為參數(shù)。,舉例,public class Test public static void main(String args) Stu stu = new Stu(); System.out.println(stu.getAge(); stu.age = 20

8、; System.out.println(stu.getAge(); int b = 121; stu.fun1(b); System.out.println(b); stu.fun2(stu); System.out.println(stu.getAge(); ,public class Stu public int age=12; public void fun1(int a) a=1000; public void fun2(Stu stu) stu.age=1000; public int getAge() return age; public void setAge(int age) this.age = age; ,引用傳遞-特殊的String類,public class Demo02 public static void main(String args

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論