前言:寫給編程已久卻忘記概念的程序員
正題開始之前,首先我們要明白幾個概念响蕴,什么是實例谆焊,什么是對象,什么是引用浦夷。先想想 在看下面的答案辖试。
new 一個對象是實例,
對劈狐,是實例罐孝,你說的沒錯》实蓿可以把這個new出來的對象叫做實例莲兢,說白了就是這個new出來的“東西”,叫它對象也可以辫继,叫它實例也可以怒见,對象和實例在這個角度上來講是等價的。
這樣:
Java中使用 new關鍵字 加上 構造方法姑宽,來創(chuàng)建一個對象遣耍,下面是一個名為Cat的類,
public class Cat {
public Cat() {
System.out.println("這是構造方法");
}
}
使用new + 構造方法 來創(chuàng)建一個對象,那么也就是
Cat c = new Cat();
前半部分炮车,Cat c 的意思是舵变,在內存中分配一個變量,名字叫c瘦穆,這個變量是Cat類型的纪隙,它的值是什么?
一會兒在說扛或;
后半部分绵咱,new Cat(); 這就是new關鍵字和構造方法來創(chuàng)建一個對象,Cat()是構造方法的名字沒錯吧熙兔?想造出一個對象來悲伶,就這么寫,語法規(guī)定的住涉,沒有為什么麸锉;
new Cat(); 說明 new這個Cat類的一個對象,程序運行的時候舆声,會調用構造方法Cat()花沉,等這個構造方法執(zhí)行完了柳爽,這個Cat類型的對象也就造出來了,真正的出現(xiàn)在內存當中了碱屁;
使用new關鍵字造出來的對象磷脯,被分配在內存的堆區(qū)(heap),而且等這個對象真正出來之后忽媒,還會做一件重要的事情:
我們這個對象是被分配在內存中的争拐,那么內存地方大了,這個對象在哪里呢晦雨?怎么找到它呢架曹?new關鍵字創(chuàng)建出一個對象之后,會把這個對象在內存中的地址返回闹瞧,通過這個地址就可以找到這個對象绑雄,那么我們上面的寫法,
Cat c = new Cat();
意思就是說,把這個對象在內存中的地址 賦值 給變量c奥邮,這就是Java中引用概念万牺,c就叫做引用,或者叫引用變量洽腺,或者直接叫變量脚粟,沒問題,都是它蘸朋;
c的值就是一個內存地址核无,或者叫引用地址,通過這個地址藕坯,就可以準確的找到我們剛才創(chuàng)建出來的對象团南,以后我們要使用這個對象做一些事情,調用此對象的方法什么的炼彪,都用過這個引用吐根,ok?
注意辐马,我再說一遍拷橘,好多人都搞不清楚,這個c到底是對象還是引用喜爷,好多人說c就是Cat類的一個實例膜楷,這是非常錯誤的,c就是引用贞奋,不是對象!我們new出來的這個東西穷绵,真正在內存中的這個東西叫做對象轿塔,叫做實例