關(guān)鍵詞:對(duì)象,對(duì)象引用,基本數(shù)據(jù)類型诈泼,傳值
對(duì)象聲明
- 定義Person類:
(為了方便說(shuō)明懂拾,我們定義的類)
public class Person{
int number
String name; //對(duì)象屬性;
public void setName(String name){
this.name = name;
} //對(duì)象方法;
} - 聲明語(yǔ)句:
Person one = new Person();
那么問(wèn)題來(lái)了煤禽,上述語(yǔ)句前后的Person是啥意思勒?都是Person對(duì)象岖赋?都是Person類檬果?還是對(duì)象與類的組合?
語(yǔ)句拆分
- new Person():這一句應(yīng)該最好理解唐断,即使用new在堆內(nèi)存中創(chuàng)建Person對(duì)象的內(nèi)存空間选脊;
- Person one :這句話其實(shí)是讓程序在棧內(nèi)存中創(chuàng)建一個(gè)名為one的Person對(duì)象的引用;
- =:將二者匹配脸甘,使得引用指向所開(kāi)辟的具體空間位置恳啥。
你可以將Person one看成電視控制器, new Person()看成電視丹诀,遙控器指向電視钝的。
對(duì)應(yīng)關(guān)系
- 一個(gè)對(duì)象引用指向0-1個(gè)對(duì)象;例如
- Person one铆遭;//定義引用無(wú)指向
- Person one = new Person(); //引用指向?qū)ο罂臻g
- 一個(gè)對(duì)象可能有0-無(wú)窮個(gè)對(duì)象引用
0指向硝桩;例如- Person one = new Person();
one = null; //失去(所有)引用指向,等待GC回收的對(duì)象實(shí)例枚荣;
- Person one = new Person();
- 多個(gè)或無(wú)窮碗脊;例如
- Person one = new Person();
Person two;
two = one; //指向同一對(duì)象空間
- Person one = new Person();
primitive類型與其他類型
java中基本數(shù)據(jù)類型包括:
- 基本類型
int number橄妆;
number = 1;(8類數(shù)據(jù)在創(chuàng)建不需要new等關(guān)鍵字開(kāi)辟存儲(chǔ)空間衙伶,且做局部變量時(shí)number在棧中存值)
System.out.print(number); //輸出number的值 - 其他類型
Person one;
one = new Person();
Person.number ; //在聲明引用指向后,未定義的實(shí)例變量系統(tǒng)默認(rèn)為0或null等(依照變量類型而定害碾,例Person.number = 0而Person.name = null)
System.out.print(one); //運(yùn)行結(jié)果Person@15db9742(類名加地址值)
注:8種數(shù)據(jù)是不是對(duì)象呢痕支,它們存在的意義在哪呢?我也理解的不是很透徹蛮原。卧须。。。
引用傳遞和值傳遞
- 引用類型:除了在函數(shù)傳值的時(shí)候是"引用傳遞"花嘶,在任何用"="向?qū)ο笞兞抠x值的時(shí)候都是"引用傳遞"笋籽。
- 值傳遞:*基本類型的傳遞都屬于值傳遞,和C語(yǔ)言一樣椭员,當(dāng)把Java的基本數(shù)據(jù)類型(如int车海,char,double等)作為入口參數(shù)傳給函數(shù)體的時(shí)候隘击,傳入的參數(shù)在函數(shù)體內(nèi)部變成了局部變量侍芝,這個(gè)局部變量是輸入?yún)?shù)的一個(gè)拷貝,所有的函數(shù)體內(nèi)部的操作都是針對(duì)這個(gè)拷貝的操作埋同,函數(shù)執(zhí)行結(jié)束后州叠,這個(gè)局部變量也就完成了它的使命,它影響不到作為輸入?yún)?shù)的變量凶赁。這種方式的參數(shù)傳遞被稱為"值傳遞"咧栗。