原來(lái)Java世界里也有這么多精彩的故事,學(xué)java真的很有趣
大千世界,無(wú)所不有。這世上不光有人類世界,還有咱們的java世界。

今天就由我這個(gè)實(shí)習(xí)導(dǎo)游帶領(lǐng)你們了解了解咱們的java世界奇妙之處。

有一種暖男叫catch,有一種真愛(ài)叫try---catch,世上最真情的愛(ài)戀就是你在try我在catch,無(wú)論你發(fā)什么脾氣,我都靜靜的接受,默默地處理,不管你有什么錯(cuò),我都會(huì)原諒你,愛(ài)著你。
有一種懶漢員工叫throws,甭管有啥事都往外拋,做錯(cuò)事了就交給上級(jí)擦屁股,上級(jí)不會(huì)再給上級(jí),給到老板為止,老板也不會(huì)那就gg了,倒閉吧。
?
有一種聽(tīng)話員工叫循環(huán),你讓他做幾遍工作他就做幾遍,讓他不睡覺(jué)一直加班他還就真敢做,沒(méi)有老板break的允許是斷然不敢停下的。
?
有一種霸道總裁叫finally,只要他想做的事就必須要做到,就算是return想要阻擋都不行,除非死亡,否則他會(huì)不顧一切去得到他的獵物。
有一種垃圾回收站叫finallize,他和我們的霸道總裁finally的名字非常相似,但是千萬(wàn)不能叫錯(cuò)了,不然后果很嚴(yán)重的。重要的事情說(shuō)三遍,不能叫錯(cuò),不能叫錯(cuò),千萬(wàn)不能叫錯(cuò)!
有一種江湖叫類,江湖里有了人就叫對(duì)象,人有了技能就叫方法。
?
有一本取名法典叫做標(biāo)識(shí)符,專門用來(lái)給類,方法和變量取名字的,法典里規(guī)定了必須以字母,下劃線?_?或者美元?$?符號(hào)為開(kāi)頭才行,而且對(duì)大小寫(xiě)還相當(dāng)敏感,并且絕對(duì)不能是關(guān)鍵字,像class,catch那種是萬(wàn)萬(wàn)不能用來(lái)取名的。
?
法典里有一種取名規(guī)則叫駝峰規(guī)則,給方法和變量取名的時(shí)候第一個(gè)單詞必須小寫(xiě),第二個(gè)、第三個(gè)單詞首字母大寫(xiě),此乃駝峰規(guī)則。當(dāng)然了,如果是給類取名的話,那就是每個(gè)單詞的首字母都得大寫(xiě),別問(wèn)我為什么,就是這么牛。
看到這里可能會(huì)有一些人有疑惑了,什么是變量呢?
別著急,我來(lái)告訴你。?

變量有三兄弟,分為老大靜態(tài)變量、老二成員變量和老三局部變量。
?
老大呢,比較無(wú)私,把自己給共享出去了;老二比較頑皮,混跡于江湖,常在類與方法中自由出入;至于老三嘛,乖乖仔一個(gè),喜歡和方法在一起玩耍,當(dāng)方法消失了,老三也會(huì)跟著方法一起殉葬。
那你們知道為什么老大這么無(wú)私嗎,因?yàn)槔洗蟊?共享掌門人static所影響了,但凡聽(tīng)過(guò)static講課的變量都會(huì)被其所影響,愿意將自己共享出去。
?
這個(gè)static可是擁有一個(gè)很龐大的靜態(tài)家族體系,有靜態(tài)代碼塊,優(yōu)先于普通代碼塊先執(zhí)行;靜態(tài)內(nèi)部類,可以直接被外部類調(diào)用;靜態(tài)方法,不需要對(duì)象就可以被該類調(diào)用。
?
Static家族都是隨著類的加載而加載,優(yōu)先于對(duì)象存在的。所以在static方法中不能使用this關(guān)鍵字,為什么呢?因?yàn)閠his代表當(dāng)前對(duì)象的一個(gè)引用,簡(jiǎn)而言之就是static出現(xiàn)的時(shí)候this還沒(méi)出生呢,所以this就不能在static方法中使用。
?
有一個(gè)老頑固叫final,被final認(rèn)定的事物就不能改變了,誰(shuí)敢亂動(dòng)跟誰(shuí)急,小伙伴們都怕他,尤其是類,遇上final就要被結(jié)扎,從此不再有子類。真是一個(gè)讓人悲傷流淚的故事。變量遇上他,從此不再長(zhǎng)身高。方法遇上他,從此不再被子類重寫(xiě)。所以呢,對(duì)于那些不想再對(duì)自我進(jìn)行改變的方法,變量就可以去找final了。
??
有一種思想叫做萬(wàn)物皆對(duì)象!

對(duì)象怎么來(lái)的呢?在程序員爸爸眼中那就是new一個(gè)就有了。
?
看到這是不是有個(gè)大膽的想法,是不是想到了自己還是一條單身狗,迫切的給自己new一個(gè)對(duì)象出來(lái)呀。大膽的new吧,騷年,new完你還是一條單身狗。對(duì)象依然是類的對(duì)象,用來(lái)調(diào)用方法和成員變量滴。
?
一個(gè)創(chuàng)建對(duì)象的例子:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?

基本上每個(gè)類都至少有一個(gè)構(gòu)造方法,除了匿名內(nèi)部類,如果一個(gè)類沒(méi)有編寫(xiě)任何一個(gè)構(gòu)造方法,那么類就會(huì)自帶一個(gè)空參構(gòu)造。如果還有一個(gè)有參構(gòu)造,那么在創(chuàng)建對(duì)象的時(shí)候就能直接初始化值,那叫一個(gè)方便啊。
構(gòu)造方法示例:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?

類長(zhǎng)大了也該結(jié)婚生子了,類的小孩就叫子類,這名字通俗易懂吧。子類可以通過(guò)extends繼承父類的方法和屬性,就好像人類當(dāng)中子女可以繼承父母的財(cái)產(chǎn)一樣。有些子類比較獨(dú)立,不甘平庸,這時(shí)候他們就自己增加了一些屬性和方法,更厲害的子類不僅自創(chuàng)方法,而且還能將父類的方法進(jìn)行改良變得更加強(qiáng)大,也就是方法的重寫(xiě)。
?
繼承與方法重寫(xiě)的例子:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?

不過(guò)呢,父類的構(gòu)造方法子類不能繼承,子類只能通過(guò)super關(guān)鍵字調(diào)用父類構(gòu)造方法。就好比父親有一套房子,但是父親還要繼續(xù)住,不能給兒子,就給了兒子一把鑰匙,兒子也可以經(jīng)常回來(lái)住。
在我們java中,一個(gè)子類只能繼承一個(gè)父類,這一點(diǎn)和人類一樣,一個(gè)兒子只有一個(gè)親爹。啥?你問(wèn)我能不能有干爹? 那當(dāng)然可以有了,接口就是子類的干爹,而且一個(gè)子類可以有多個(gè)接口,子類名implements接口名,接口名就能實(shí)現(xiàn)多個(gè)接口了
?
有一種保密叫封裝
封裝可以將該類的某些信息隱藏在類的內(nèi)部,除了本類不允許其他類直接訪問(wèn),畢竟誰(shuí)都有個(gè)小秘密是不想讓人知道的。
?
那么怎么封裝呢?簡(jiǎn)單,只需要在屬性最前面加上private就行了。
?
封裝屬性示例:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???

如果想要修改和查看封裝后的屬性,那就需要通過(guò)get(),set()方法了。
不是特別重要的數(shù)據(jù)就可以使用protected修飾,這樣子類還能在不同包中訪問(wèn),還有兩張?jiān)L問(wèn)權(quán)限修飾符是public和default(默認(rèn)不寫(xiě)),public比較熱情好客,誰(shuí)都能訪問(wèn)他。
?
四種權(quán)限修飾符:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?

封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié),就好比人類有一臺(tái)電視機(jī),人類只需要知道怎么使用,并不用了解電視機(jī)構(gòu)成元件;而且還挺安全的,因?yàn)閯e人看不到啊,哈哈哈!
有一種照騙叫做多態(tài)
舉個(gè)栗子吧:聽(tīng)說(shuō)最近人類挺流行網(wǎng)戀的,然而沒(méi)有線下見(jiàn)面誰(shuí)也不知道手機(jī)那一端的人長(zhǎng)啥樣啊,視頻又太模糊了看不清,于是照騙出現(xiàn)了,人類將照片ps的美美噠,大臉盤變成瓜子臉,小眼睛變大眼睛,各種美白磨皮,然后再把照片發(fā)給對(duì)方來(lái)吸引對(duì)方,終于關(guān)系進(jìn)一步發(fā)展到了奔現(xiàn)的程度了,然后就沒(méi)有然后了。 這個(gè)故事告訴我們?cè)跊](méi)有真正見(jiàn)到對(duì)方之前,你永遠(yuǎn)也不知道手機(jī)另一端的對(duì)方長(zhǎng)啥樣。多態(tài)也是一個(gè)道理,左邊一個(gè)樣,右邊又是一個(gè)樣。
多態(tài)存在有3個(gè)必要條件:
要有繼承
要有方法重寫(xiě)?
父類引用指向子類對(duì)象
多態(tài)又分兩種形式:
一種是向上轉(zhuǎn)型,格式是:父類名 父類對(duì)象 =?new?子類名(); 向上轉(zhuǎn)型對(duì)象不能使用子類新增的成員變量和方法;
?
還有一種是向下轉(zhuǎn)型,格式是:子類名 子類對(duì)象= (父類名) 父類對(duì)象;?向下轉(zhuǎn)型對(duì)象既能調(diào)用父類方法也能調(diào)用子類本身的方法和屬性。
?
對(duì)此我有一個(gè)口訣分享給大家:(適用于向上轉(zhuǎn)型)
多態(tài)的成員變量和方法:編譯看左邊(父類),運(yùn)行看右邊(子類);
多態(tài)的成員方法:? ?? ?? ???編譯看左邊(父類),運(yùn)行看右邊(子類)
進(jìn)行向下轉(zhuǎn)型時(shí)一定要先來(lái)個(gè)向上轉(zhuǎn)型,不然就會(huì)出現(xiàn)類型轉(zhuǎn)換異常---ClassCastException。
?
多態(tài)的例子:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???

大家都知道梵高吧,人類當(dāng)中有名的抽象派畫(huà)家,巧了,咱java家族里也有一種類叫做?------抽象類。抽象類是一為嚴(yán)厲的父類,他的抽象方法沒(méi)有方法體,他為子類提供了一個(gè)通用模板,可以避免子類設(shè)計(jì)的隨意性,子類必須重寫(xiě)抽象父類的方法。
?
抽象方法和抽象類都必須用abstract來(lái)修飾,而且抽象類也可以沒(méi)有抽象方法。
抽象類的例子:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???

提到抽象方法就不得不再說(shuō)一下接口了,接口中所有方法都是抽象的,所有變量都默認(rèn)使用public static final修飾,也就是說(shuō)接口中的變量就是靜態(tài)常量了,值不能被修改了。
?
接口的例子:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?

最后再給大家安利個(gè)美好的畫(huà)面,人類流傳著睡美人的故事,公主碰到紡錘讓詛咒生效,并在城堡里一直昏睡等待王子的親吻將她喚醒。而我們java世界中就經(jīng)常有這么一幅畫(huà)面:
?

有一種紡錘叫wait(),有一種吻叫notify()。
?
有一位美麗的線程公主,她遇上了wait(),除非有王子吻醒她,否則她將一直處于昏睡狀態(tài),不久線程王子出現(xiàn)了,王子帶著notify()將公主喚醒了。從此公主和王子就在一起過(guò)著幸福美好的生活了。

怎么樣?看了這么多,覺(jué)得咱java世界相當(dāng)有趣吧,是不是還想繼續(xù)深入探索呀?

本文來(lái)源:尚學(xué)堂社區(qū),逗逼碼農(nóng)-當(dāng)你老了;