輕松理解Java面向?qū)ο?/h1>
學(xué)過面向?qū)ο缶幊痰某绦騿T都是自我感覺不缺對象的,甚至覺得是一件很簡單的事情,不信你看:
new girlfriend();
偷偷告訴你,玩這個(gè)梗的基本上都是真正的單身狗了!
面向?qū)ο蟪跆?/h2>
啥是面向?qū)ο筻??我們常說面向?qū)ο缶幊淌巧兑馑监??難道是天天對著自己的對象敲代碼嘛?
這就扯遠(yuǎn)了,所謂的面向?qū)ο缶幊桃簿褪荗OP,它其實(shí)是一種程序設(shè)計(jì)的規(guī)范或者說是方法吧,也就是它會(huì)指導(dǎo)你如何進(jìn)行程序的設(shè)計(jì)代碼編寫,是一種思想,編程思想,其實(shí)談到思想這個(gè)層次就覺得高大上了不少,一般所謂的思想都是比較抽象的了。
面向?qū)ο笳f白了就是一種程序設(shè)計(jì)的規(guī)范,一般說的面向?qū)ο缶幊趟枷刖褪侵傅哪愕弥烂嫦驅(qū)ο蟮某绦蛟撛趺慈ピO(shè)計(jì)。
面向?qū)ο笫且环N編程思想,你有這個(gè)思想覺悟嘛?
面向?qū)ο笏枷刖唧w是什么
那所謂的面向?qū)ο缶幊趟枷胧鞘裁茨兀恳话忝嫦驅(qū)ο笏枷胫傅木褪悄憧梢砸袁F(xiàn)實(shí)世界中客觀存在的事物也就是對象去設(shè)計(jì)程序,啥意思嘞?比如說大家都吃過水果吧,那么都知道水果一詞就是個(gè)總的概括,就是一個(gè)抽象,只說水果你也不知道具體指的是什么,因?yàn)樘O果,香蕉和橘子等等都是水果。
上述說的水果這些就是現(xiàn)實(shí)世界中客觀存在的,那么在代碼層面我們?nèi)绾稳ケ磉_(dá)這些呢?通過面向?qū)ο缶幊痰乃枷?,我們是可以把水果在代碼層面給表示出來的,那怎么表示呢?
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,水果就是一個(gè)類別,就是一個(gè)類,然后像蘋果啊,香蕉和橘子這些就是一個(gè)個(gè)具體的對象,好比水果是一個(gè)大的類別,其下有蘋果,香蕉和橘子這些子類,也就是有一個(gè)類,就可以產(chǎn)生多個(gè)對象,然后像類別比如還有人類,那么由人類這個(gè)類別產(chǎn)生出來的對象有大人,小孩,或者是男人和女人,當(dāng)然可能還有……
到這里需要重點(diǎn)告訴你的就是,對于面向?qū)ο蠖裕攸c(diǎn)關(guān)注的就是對象,我們從字面意思理解也可以知道誰是重點(diǎn),面向?qū)ο舐?,自然是以對象為中心去操作,所以面向?qū)ο缶幊痰暮诵臅r(shí)對象。
面向過程
提到面向?qū)ο?,那就不得不提面向過程,這里先聲明一下,這里說的面向?qū)ο蠛兔嫦蜻^程,我們指的都是一種程序的設(shè)計(jì)思想。
對于面向過程大家應(yīng)該不陌生,因?yàn)榇蠖鄶?shù)計(jì)算機(jī)專業(yè)的都會(huì)學(xué)習(xí)C語言,而C語言就是一門面向過程的編程語言。
當(dāng)然,對于Java那么大的名氣,想必大家早就有所耳聞,Java是一門面向?qū)ο蟮木幊陶Z言。
我們上面一直在提思想思想的,總覺得有點(diǎn)抽象,這里提到C和Java,正好一個(gè)是面向過程的,一個(gè)是面向?qū)ο蟮?,我們可以比較下看看面向過程和面向?qū)ο笥惺裁床煌?/p>
面向過程是怎樣的
對于面向過程而言,它的關(guān)注點(diǎn)是過程,也就好比你做一件事情,重點(diǎn)在于做這件事情的過程,比如你想吃餃子,那按照面向過程的思想那就需要把吃餃子這個(gè)事情細(xì)分幾個(gè)步驟,比如搟面皮,剁餃子餡,包餃子等等,然后就需要按照這些步驟去做了。
在代碼層面,就拿C語言來說,這些一個(gè)個(gè)的步驟對應(yīng)的就是C語言中的一個(gè)個(gè)函數(shù),在C語言中,一個(gè)函數(shù)就代表一種功能,既然是功能最終就是達(dá)到一個(gè)目的,比如上述的搟好了面皮,剁好了餃子餡以及包好了餃子,所以,按照面向過程的思想就是要這樣一步步來操作。
面向過程關(guān)注的就是其中的過程,主要就是通過一個(gè)個(gè)的函數(shù)來完成特定的功能,組合起來來完成整體的功能。
所以,面向過程就是這樣通過一個(gè)個(gè)的函數(shù)來完成相應(yīng)功能,如下圖這樣:
再來看看C語言的代碼,看看是不是以函數(shù)為主去實(shí)現(xiàn)相應(yīng)的功能:
#include <stdio.h>void interchange(int u, int v); /* 聲明函數(shù) */int main(void) /* 主函數(shù) */ { int x = 5, y = 10; printf("Originally x = %d and y = %d.\n", x, y); interchange(x, y); printf("Now x = %d and y = %d.\n", x, y); return 0; }void interchange(int u, int v) /* 定義函數(shù) */ { int temp; temp = u; u = v; v = temp; }
大家可以感受一下面向過程是怎樣的,那么面向?qū)ο笥质窃鯓拥哪兀?/p>
面向?qū)ο笫窃鯓拥?/h3>
還拿上面的吃餃子為例,如果時(shí)按照面向?qū)ο蟮乃枷雭?,那你想吃餃子怎么整?還要自己親自動(dòng)手去做嘛?當(dāng)然不用啊,那怎么整,必須是:
new girlfriend();
對呀,new一個(gè)對象啊,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,關(guān)注點(diǎn)就是對象了,一切的核心就是對象,想吃餃子,找個(gè)女朋友來給你做啊,沒女朋友?那簡單啊,new一個(gè)你馬上就有對象了。
然后吃餃子這件事情就變成這樣了:
感受到差距了嘛?衣來伸手飯來張口就是這種感覺,有對象真好!
在面向?qū)ο蟪绦蛟O(shè)計(jì)中,都是通過一個(gè)個(gè)的對象來進(jìn)行各種功能的實(shí)現(xiàn),關(guān)注點(diǎn)就是對象,通過上述對比可以看出面向?qū)ο笤O(shè)計(jì)起來更加高效。
小總結(jié)
對于面向過程,關(guān)注點(diǎn)就是過程了,主要就是通過一個(gè)個(gè)的函數(shù)去完成相應(yīng)的功能,主要就是關(guān)注數(shù)據(jù)的流向,就是數(shù)據(jù)在各個(gè)函數(shù)之間的傳遞,而面向?qū)ο竽??它的關(guān)注點(diǎn)是對象,面向?qū)ο蟮某绦蛟O(shè)計(jì)中,主要就是通過各個(gè)對象去完成相應(yīng)的功能,關(guān)注的就是各個(gè)對象之間的互相操作。
純粹的Java
說到面向?qū)ο?,那咱一定要說Java了,Java是一門純粹的面向?qū)ο缶幊陶Z言,對了Java是基于C++的,但是它別C++更加面向?qū)ο?,為啥?/p>
主要是Java在設(shè)計(jì)上是汲取了C++的優(yōu)點(diǎn)的,具體表現(xiàn)為繼續(xù)使用C++面向?qū)ο蠹夹g(shù)的核心,另外在C++中的指針是很容易引起錯(cuò)誤的,所以這點(diǎn)Java是舍棄的,只不過在Java中使用了引用來代替指針,另外也舍棄了C++中的運(yùn)算符重載和多繼承的特性,使用了接口來代替等。
類和對象
我們上面說了面向過程,對于面向過程而言,它最小的程序設(shè)計(jì)單元就是函數(shù),那么對于面向?qū)ο筻??它的最小程序設(shè)計(jì)單元是啥呢?
這里可不是對象,而是類,在面向?qū)ο缶幊淘O(shè)計(jì)中,其最小的程序設(shè)計(jì)單元就是類,那找個(gè)類和對象有啥關(guān)系呢?
還記得上面說的那個(gè)水果的例子嘛?水果就是一類東西,其下有蘋果等等各種水果。
面向過程程序設(shè)計(jì)中是各個(gè)函數(shù),而面向?qū)ο笾袆t是各個(gè)類,這些個(gè)類可以生成多個(gè)對象,這些對象其實(shí)就對應(yīng)這具體的某些事物了,比如水果類,生成蘋果,香蕉這些對象,人類生出男人和女人這些對象。(聽著咋那么別扭呢?)
那么這個(gè)類是個(gè)什么樣子呢?一般的這些個(gè)類都有一些內(nèi)部狀態(tài)數(shù)據(jù),說白了就是對于類而言,它包括屬性和方法,比如蘋果這個(gè)對象,它有甜度,大小等等這些屬性特征,然后蘋果還可以被吃,這屬于一種行為特征,其實(shí)就是一種方法,這里的方法其實(shí)就是面向過程中的函數(shù),表示一個(gè)功能,這里就可以表示蘋果被吃了,所以來看類,它是長這個(gè)樣子的:
在Java代碼層面就是這樣的:
class Data{ //屬性 int a = 20; String b = new String("666"); //方法 public void someDatas(){ int c = 30; }}
在Java中,一切皆對象,寫Java代碼基本上大多數(shù)都是要定義各種類,然后由類可以產(chǎn)生一個(gè)個(gè)具體的對象,類中可以包含兩個(gè)基本的類型:屬性和方法,然后生成的具體的對象會(huì)被保存在Java內(nèi)存中的堆內(nèi)存中,也就是每個(gè)對象都有一個(gè)屬于其自己的空間,這個(gè)空間來存儲對象包含的數(shù)據(jù)。
面向?qū)ο蟮幕咎卣?/h3>
對于面向?qū)ο蠖?,它是有一些基本特征的,就是如下三個(gè)基本特征:
1、封裝 2、繼承 3、多態(tài)
對于Java而言,它是完全支持面向?qū)ο蟮倪@三個(gè)基本特征的,對于這三個(gè)特征來說,是值得好好學(xué)習(xí)的,這里不展開敘述了,下次單獨(dú)介紹,畢竟今天主要是介紹面向?qū)ο蟮摹?/p>
附加知識點(diǎn)
Java和C++都是典型的面向?qū)ο缶幊陶Z言,但是Java是基于C++的,上述也說了其主要的區(qū)別點(diǎn),這里再單獨(dú)介紹下關(guān)于Java中的引用和C++中的指針問題。
Java是舍棄了C++中的指針,然后使用引用來代替的,那指針是干嘛的,是用來操作內(nèi)存的,為啥要操作內(nèi)存呢?我們使用編程語言寫一些代碼,其實(shí)都是在處理各種各樣的數(shù)據(jù),這其中要牽涉到數(shù)據(jù)的保存,那保存在哪里,一般的話我們寫好的代碼剛開始是在我們電腦上的硬盤中,但是當(dāng)程序要運(yùn)行的話,就需要把程序加載進(jìn)內(nèi)存中才能運(yùn)行,那想一下加載進(jìn)內(nèi)存中,這些數(shù)據(jù)就存放進(jìn)去了,那始終還是要操作這些數(shù)據(jù)的,那該怎么操作,對于我們程序員來說,主要就是代碼層次的操作了,我們需要一個(gè)特殊的方法啥的,在代碼層面與這些內(nèi)存中的數(shù)據(jù)建立一種連接,這個(gè)怎么弄?
C++中就是用指針來操作內(nèi)存中的這些數(shù)據(jù),指針就是一個(gè)連接物,那放在Java中沒有指針了,就是使用引用來解決和這個(gè)問題了。在經(jīng)典的《Java編程思想》一書中舉了一個(gè)遙控器和電視的例子,遙控器就好比是引用,電視機(jī)就好比是內(nèi)存中的數(shù)據(jù),這里其實(shí)就是對象,兩者鏈接起來,就可以使用遙控器來遙控電視機(jī),當(dāng)然,遙控器是可以獨(dú)立存在的,知道那種萬能遙控器嗎?剛開始沒有和指定的電視機(jī)配對,是不能使用的,這時(shí)候相當(dāng)于是個(gè)獨(dú)立存在的個(gè)體,代碼層面就是這樣的:
String s;
你看這個(gè)就是創(chuàng)建了一個(gè)引用s,但是這個(gè)引用并沒有指向具體的對象,好比一個(gè)沒有配對的萬能遙控器,那怎么配對呢?需要把它與一個(gè)實(shí)際對象建立起來
String s = new String("hello");
好了,今天的分享就到這里,我們下次再見!
瀏覽
92
學(xué)過面向?qū)ο缶幊痰某绦騿T都是自我感覺不缺對象的,甚至覺得是一件很簡單的事情,不信你看:
new girlfriend();偷偷告訴你,玩這個(gè)梗的基本上都是真正的單身狗了!
面向?qū)ο蟪跆?/h2>
啥是面向?qū)ο筻??我們常說面向?qū)ο缶幊淌巧兑馑监??難道是天天對著自己的對象敲代碼嘛?
這就扯遠(yuǎn)了,所謂的面向?qū)ο缶幊桃簿褪荗OP,它其實(shí)是一種程序設(shè)計(jì)的規(guī)范或者說是方法吧,也就是它會(huì)指導(dǎo)你如何進(jìn)行程序的設(shè)計(jì)代碼編寫,是一種思想,編程思想,其實(shí)談到思想這個(gè)層次就覺得高大上了不少,一般所謂的思想都是比較抽象的了。
面向?qū)ο笳f白了就是一種程序設(shè)計(jì)的規(guī)范,一般說的面向?qū)ο缶幊趟枷刖褪侵傅哪愕弥烂嫦驅(qū)ο蟮某绦蛟撛趺慈ピO(shè)計(jì)。
面向?qū)ο笫且环N編程思想,你有這個(gè)思想覺悟嘛?
面向?qū)ο笏枷刖唧w是什么
那所謂的面向?qū)ο缶幊趟枷胧鞘裁茨兀恳话忝嫦驅(qū)ο笏枷胫傅木褪悄憧梢砸袁F(xiàn)實(shí)世界中客觀存在的事物也就是對象去設(shè)計(jì)程序,啥意思嘞?比如說大家都吃過水果吧,那么都知道水果一詞就是個(gè)總的概括,就是一個(gè)抽象,只說水果你也不知道具體指的是什么,因?yàn)樘O果,香蕉和橘子等等都是水果。
上述說的水果這些就是現(xiàn)實(shí)世界中客觀存在的,那么在代碼層面我們?nèi)绾稳ケ磉_(dá)這些呢?通過面向?qū)ο缶幊痰乃枷?,我們是可以把水果在代碼層面給表示出來的,那怎么表示呢?
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,水果就是一個(gè)類別,就是一個(gè)類,然后像蘋果啊,香蕉和橘子這些就是一個(gè)個(gè)具體的對象,好比水果是一個(gè)大的類別,其下有蘋果,香蕉和橘子這些子類,也就是有一個(gè)類,就可以產(chǎn)生多個(gè)對象,然后像類別比如還有人類,那么由人類這個(gè)類別產(chǎn)生出來的對象有大人,小孩,或者是男人和女人,當(dāng)然可能還有……
到這里需要重點(diǎn)告訴你的就是,對于面向?qū)ο蠖裕攸c(diǎn)關(guān)注的就是對象,我們從字面意思理解也可以知道誰是重點(diǎn),面向?qū)ο舐?,自然是以對象為中心去操作,所以面向?qū)ο缶幊痰暮诵臅r(shí)對象。
面向過程
提到面向?qū)ο?,那就不得不提面向過程,這里先聲明一下,這里說的面向?qū)ο蠛兔嫦蜻^程,我們指的都是一種程序的設(shè)計(jì)思想。
對于面向過程大家應(yīng)該不陌生,因?yàn)榇蠖鄶?shù)計(jì)算機(jī)專業(yè)的都會(huì)學(xué)習(xí)C語言,而C語言就是一門面向過程的編程語言。
當(dāng)然,對于Java那么大的名氣,想必大家早就有所耳聞,Java是一門面向?qū)ο蟮木幊陶Z言。
我們上面一直在提思想思想的,總覺得有點(diǎn)抽象,這里提到C和Java,正好一個(gè)是面向過程的,一個(gè)是面向?qū)ο蟮?,我們可以比較下看看面向過程和面向?qū)ο笥惺裁床煌?/p>
面向過程是怎樣的
對于面向過程而言,它的關(guān)注點(diǎn)是過程,也就好比你做一件事情,重點(diǎn)在于做這件事情的過程,比如你想吃餃子,那按照面向過程的思想那就需要把吃餃子這個(gè)事情細(xì)分幾個(gè)步驟,比如搟面皮,剁餃子餡,包餃子等等,然后就需要按照這些步驟去做了。
在代碼層面,就拿C語言來說,這些一個(gè)個(gè)的步驟對應(yīng)的就是C語言中的一個(gè)個(gè)函數(shù),在C語言中,一個(gè)函數(shù)就代表一種功能,既然是功能最終就是達(dá)到一個(gè)目的,比如上述的搟好了面皮,剁好了餃子餡以及包好了餃子,所以,按照面向過程的思想就是要這樣一步步來操作。
面向過程關(guān)注的就是其中的過程,主要就是通過一個(gè)個(gè)的函數(shù)來完成特定的功能,組合起來來完成整體的功能。
所以,面向過程就是這樣通過一個(gè)個(gè)的函數(shù)來完成相應(yīng)功能,如下圖這樣:
再來看看C語言的代碼,看看是不是以函數(shù)為主去實(shí)現(xiàn)相應(yīng)的功能:
#include <stdio.h>void interchange(int u, int v); /* 聲明函數(shù) */int main(void) /* 主函數(shù) */{int x = 5, y = 10;printf("Originally x = %d and y = %d.\n", x, y);interchange(x, y);printf("Now x = %d and y = %d.\n", x, y);return 0;}void interchange(int u, int v) /* 定義函數(shù) */{int temp;temp = u;u = v;v = temp;}
大家可以感受一下面向過程是怎樣的,那么面向?qū)ο笥质窃鯓拥哪兀?/p>
面向?qū)ο笫窃鯓拥?/h3>
還拿上面的吃餃子為例,如果時(shí)按照面向?qū)ο蟮乃枷雭?,那你想吃餃子怎么整?還要自己親自動(dòng)手去做嘛?當(dāng)然不用啊,那怎么整,必須是:
new girlfriend();對呀,new一個(gè)對象啊,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,關(guān)注點(diǎn)就是對象了,一切的核心就是對象,想吃餃子,找個(gè)女朋友來給你做啊,沒女朋友?那簡單啊,new一個(gè)你馬上就有對象了。
然后吃餃子這件事情就變成這樣了:
感受到差距了嘛?衣來伸手飯來張口就是這種感覺,有對象真好!
在面向?qū)ο蟪绦蛟O(shè)計(jì)中,都是通過一個(gè)個(gè)的對象來進(jìn)行各種功能的實(shí)現(xiàn),關(guān)注點(diǎn)就是對象,通過上述對比可以看出面向?qū)ο笤O(shè)計(jì)起來更加高效。
小總結(jié)
對于面向過程,關(guān)注點(diǎn)就是過程了,主要就是通過一個(gè)個(gè)的函數(shù)去完成相應(yīng)的功能,主要就是關(guān)注數(shù)據(jù)的流向,就是數(shù)據(jù)在各個(gè)函數(shù)之間的傳遞,而面向?qū)ο竽??它的關(guān)注點(diǎn)是對象,面向?qū)ο蟮某绦蛟O(shè)計(jì)中,主要就是通過各個(gè)對象去完成相應(yīng)的功能,關(guān)注的就是各個(gè)對象之間的互相操作。
純粹的Java
說到面向?qū)ο?,那咱一定要說Java了,Java是一門純粹的面向?qū)ο缶幊陶Z言,對了Java是基于C++的,但是它別C++更加面向?qū)ο?,為啥?/p>
主要是Java在設(shè)計(jì)上是汲取了C++的優(yōu)點(diǎn)的,具體表現(xiàn)為繼續(xù)使用C++面向?qū)ο蠹夹g(shù)的核心,另外在C++中的指針是很容易引起錯(cuò)誤的,所以這點(diǎn)Java是舍棄的,只不過在Java中使用了引用來代替指針,另外也舍棄了C++中的運(yùn)算符重載和多繼承的特性,使用了接口來代替等。
類和對象
我們上面說了面向過程,對于面向過程而言,它最小的程序設(shè)計(jì)單元就是函數(shù),那么對于面向?qū)ο筻??它的最小程序設(shè)計(jì)單元是啥呢?
這里可不是對象,而是類,在面向?qū)ο缶幊淘O(shè)計(jì)中,其最小的程序設(shè)計(jì)單元就是類,那找個(gè)類和對象有啥關(guān)系呢?
還記得上面說的那個(gè)水果的例子嘛?水果就是一類東西,其下有蘋果等等各種水果。
面向過程程序設(shè)計(jì)中是各個(gè)函數(shù),而面向?qū)ο笾袆t是各個(gè)類,這些個(gè)類可以生成多個(gè)對象,這些對象其實(shí)就對應(yīng)這具體的某些事物了,比如水果類,生成蘋果,香蕉這些對象,人類生出男人和女人這些對象。(聽著咋那么別扭呢?)
那么這個(gè)類是個(gè)什么樣子呢?一般的這些個(gè)類都有一些內(nèi)部狀態(tài)數(shù)據(jù),說白了就是對于類而言,它包括屬性和方法,比如蘋果這個(gè)對象,它有甜度,大小等等這些屬性特征,然后蘋果還可以被吃,這屬于一種行為特征,其實(shí)就是一種方法,這里的方法其實(shí)就是面向過程中的函數(shù),表示一個(gè)功能,這里就可以表示蘋果被吃了,所以來看類,它是長這個(gè)樣子的:
在Java代碼層面就是這樣的:
class Data{//屬性int a = 20;String b = new String("666");//方法public void someDatas(){int c = 30;}}
在Java中,一切皆對象,寫Java代碼基本上大多數(shù)都是要定義各種類,然后由類可以產(chǎn)生一個(gè)個(gè)具體的對象,類中可以包含兩個(gè)基本的類型:屬性和方法,然后生成的具體的對象會(huì)被保存在Java內(nèi)存中的堆內(nèi)存中,也就是每個(gè)對象都有一個(gè)屬于其自己的空間,這個(gè)空間來存儲對象包含的數(shù)據(jù)。
面向?qū)ο蟮幕咎卣?/h3>
對于面向?qū)ο蠖?,它是有一些基本特征的,就是如下三個(gè)基本特征:
1、封裝 2、繼承 3、多態(tài)
對于Java而言,它是完全支持面向?qū)ο蟮倪@三個(gè)基本特征的,對于這三個(gè)特征來說,是值得好好學(xué)習(xí)的,這里不展開敘述了,下次單獨(dú)介紹,畢竟今天主要是介紹面向?qū)ο蟮摹?/p>
附加知識點(diǎn)
Java和C++都是典型的面向?qū)ο缶幊陶Z言,但是Java是基于C++的,上述也說了其主要的區(qū)別點(diǎn),這里再單獨(dú)介紹下關(guān)于Java中的引用和C++中的指針問題。
Java是舍棄了C++中的指針,然后使用引用來代替的,那指針是干嘛的,是用來操作內(nèi)存的,為啥要操作內(nèi)存呢?我們使用編程語言寫一些代碼,其實(shí)都是在處理各種各樣的數(shù)據(jù),這其中要牽涉到數(shù)據(jù)的保存,那保存在哪里,一般的話我們寫好的代碼剛開始是在我們電腦上的硬盤中,但是當(dāng)程序要運(yùn)行的話,就需要把程序加載進(jìn)內(nèi)存中才能運(yùn)行,那想一下加載進(jìn)內(nèi)存中,這些數(shù)據(jù)就存放進(jìn)去了,那始終還是要操作這些數(shù)據(jù)的,那該怎么操作,對于我們程序員來說,主要就是代碼層次的操作了,我們需要一個(gè)特殊的方法啥的,在代碼層面與這些內(nèi)存中的數(shù)據(jù)建立一種連接,這個(gè)怎么弄?
C++中就是用指針來操作內(nèi)存中的這些數(shù)據(jù),指針就是一個(gè)連接物,那放在Java中沒有指針了,就是使用引用來解決和這個(gè)問題了。在經(jīng)典的《Java編程思想》一書中舉了一個(gè)遙控器和電視的例子,遙控器就好比是引用,電視機(jī)就好比是內(nèi)存中的數(shù)據(jù),這里其實(shí)就是對象,兩者鏈接起來,就可以使用遙控器來遙控電視機(jī),當(dāng)然,遙控器是可以獨(dú)立存在的,知道那種萬能遙控器嗎?剛開始沒有和指定的電視機(jī)配對,是不能使用的,這時(shí)候相當(dāng)于是個(gè)獨(dú)立存在的個(gè)體,代碼層面就是這樣的:
String s;你看這個(gè)就是創(chuàng)建了一個(gè)引用s,但是這個(gè)引用并沒有指向具體的對象,好比一個(gè)沒有配對的萬能遙控器,那怎么配對呢?需要把它與一個(gè)實(shí)際對象建立起來
String s = new String("hello");好了,今天的分享就到這里,我們下次再見!
