那些年亚隙,那些坑

本文章已授權(quán)玉剛說微信公眾號獨家發(fā)布

Java 子父類相互轉(zhuǎn)換

這個涉及到面向?qū)ο筇匦灾鄳B(tài),考驗?zāi)銓@個特性理解是否徹底违崇,接下來舉例兩個常用的 API 來解釋這個問題

子類轉(zhuǎn)父類(setContentView)

setContentView 需要一個 View 類型的參數(shù)阿弃,這里傳入 View 的子類 TextView

這里可以看到編譯并沒有任何問題,接下來運行一下

也是沒有問題的羞延,證明了子類可以代替父類(子類轉(zhuǎn)父類完全OK)

父類轉(zhuǎn)子類(findViewById)

findViewById 最后返回 View 的子類恤浪,這里我們先按常規(guī)寫法過一遍

我現(xiàn)在突然有一個大膽的想法

那我想強轉(zhuǎn)成 ImageView 試試看會怎么樣

雖然 findViewById 可以強轉(zhuǎn)成 View 的子類,但是本質(zhì)獲取到的還是 XML 中的那個類型 View肴楷,XML 中是 TextView,findViewById 獲取到也只能是 TextView荠呐,如果強轉(zhuǎn)成 ImageView 一定會報類型轉(zhuǎn)換異常

在這里再總結(jié)一下赛蔫,父類是可以轉(zhuǎn)成子類的,但是有一個前提條件泥张,那就是它本質(zhì)上就是這個子類的對象

基本數(shù)據(jù)類型和對象

看到這里呵恢,你是否曾以為基本數(shù)據(jù)類型和對象一樣了?

然后事實并非如此媚创,這里將 int 置為空編譯不通過

基本數(shù)據(jù)類型和對象之間有很大的區(qū)別渗钉,基本數(shù)據(jù)類型只能是一個數(shù)值,而對象可以有變量和方法钞钙,int 的默認值為0鳄橘,而 Integer 的默認值為 null,因為它們本身就是兩種不同的東西

switch 不止可以判斷 int

從 Java JDK 1.7 開始芒炼,switch 語句就可以開始支持判斷 string 對象 和 enum 枚舉

string 中 equals 的兩種用法區(qū)別

列舉一個簡單的案例

將文本對象置為空后再次運行

拋出了空指針異常瘫怜,所以推薦第一種寫法來避免空指針異常

變量 == 對象 ?

這個也是面向?qū)ο笏枷氲囊徊糠直竟簦覀兛梢园讶吮茸饕粋€對象鲸湃,把變量比作人的姓名赠涮,而一個人可以有多個姓名,但實際只有一個人暗挑。

要想獲得新的對象笋除,可以使用以下三種方式

  • new

  • 克隆

  • 序列化

每個類其實都是 Object 的子類

我們知道 Object 類中有 equals 和 toString ,如果我們不繼承至 Object 是不是沒有這些方法了炸裆?

事實并非如此垃它,其實我們創(chuàng)建一個類,什么都不繼承晒衩,但只要它是一個類嗤瞎,就一定是 Object 的子類,就會擁有 Object 的屬性和方法听系。我說了這么多贝奇,你還是不相信?請看下圖

泛型限定的坑

一個泛型可以限定一個繼承類和多個實現(xiàn)接口

你是否和我一樣靠胜,限定泛型是這樣的掉瞳,然而編譯卻不給過

實際需要這樣定義泛型,并不能使用 implements

如果將接口類放在前面再試試浪漠,提示后面只能放接口類

被 final 修飾的對象

我們常常誤以為陕习,被 final 修飾對象不能被修改,其實這種說法不是完全正確的

修改這個對象的成員變量是沒有任何問題的

但是不能對這個對象進行重新賦值

setOnClickListener(this) 的好處

在開發(fā)中址愿,我們通常對 View 設(shè)置點擊監(jiān)聽是這樣子的

如果這個界面有很多個 View 要設(shè)置監(jiān)聽呢该镣?就變成了這樣

監(jiān)聽一多代碼就很亂了,我們要必須要經(jīng)過一些優(yōu)化

這樣的好處在于可以提高代碼的可閱讀性响谓,又可以復(fù)用同一個對象损合,達到對象優(yōu)化的效果

if else 語句層級嵌套

當你看到這樣子的代碼,都會覺得自己想靜一靜

其實這種寫法在一些老項目很常見娘纷,我們也極有為這種代碼寫好了鋪墊嫁审,所以讓我們用規(guī)范的寫法避開這種坑吧

我們可以用 switch 語句,但是有一定局限性(只能判斷 int赖晶,string律适,enum),所以當我們不能用 switch 語句的時候可以使用以下方式減少判斷語句層級嵌套

啥遏插?這不是跟剛剛的差不多捂贿?那你可以考慮換下面這種寫法

重寫和重載分不清楚

重寫父類的 toString 方法

重載父類的 toString 方法

Android 技術(shù)討論 Q 群:10047167

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胳嘲,隨后出現(xiàn)的幾起案子眷蜓,更是在濱河造成了極大的恐慌,老刑警劉巖胎围,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吁系,死亡現(xiàn)場離奇詭異德召,居然都是意外死亡,警方通過查閱死者的電腦和手機汽纤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門上岗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕴坪,你說我怎么就攤上這事肴掷。” “怎么了背传?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵呆瞻,是天一觀的道長。 經(jīng)常有香客問我径玖,道長痴脾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任梳星,我火速辦了婚禮赞赖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冤灾。我一直安慰自己前域,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布韵吨。 她就那樣靜靜地躺著匿垄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪归粉。 梳的紋絲不亂的頭發(fā)上椿疗,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音盏浇,去河邊找鬼。 笑死芽狗,一個胖子當著我的面吹牛绢掰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播童擎,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼滴劲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顾复?” 一聲冷哼從身側(cè)響起班挖,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芯砸,沒想到半個月后萧芙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给梅,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年双揪,在試婚紗的時候發(fā)現(xiàn)自己被綠了动羽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔期,死狀恐怖运吓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疯趟,我是刑警寧澤拘哨,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站信峻,受9級特大地震影響倦青,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜站欺,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一姨夹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矾策,春花似錦磷账、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蓬豁,卻和暖如春绰咽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背地粪。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工取募, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蟆技。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓玩敏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親质礼。 傳聞我的和親對象是個殘疾皇子旺聚,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容