Android Developer表窘,必知必會(huì)的Java知識(shí)(一)

? ? ? ? 作為一名Android 開(kāi)發(fā)者典予,掌握J(rèn)ava相關(guān)知識(shí)是毋容置疑的。在掌握的基礎(chǔ)上乐严,根據(jù)使用場(chǎng)景選擇適當(dāng)方式瘤袖,不僅能夠大大降低bug出現(xiàn)概率,對(duì)代碼性能昂验,代碼編寫風(fēng)格都有一定程度上的提高與改善捂敌。

? ? ? ? 以下問(wèn)題主要來(lái)自日常開(kāi)發(fā),codeView既琴,靜態(tài)代碼檢查幾個(gè)方面占婉,覺(jué)得很有必要總結(jié)一下,作為一份checklist甫恩,供日后瀏覽查閱逆济。


(1)transient關(guān)鍵字和@Transisent注解

? ? ? ?通常使用transient關(guān)鍵字去修飾對(duì)象的某個(gè)域或者多個(gè)域,當(dāng)該對(duì)象進(jìn)行Serializable序列化時(shí),這些被transient關(guān)鍵字修飾的域奖慌,將不會(huì)被序列化霎终,這些域僅僅保留在內(nèi)存中,不會(huì)進(jìn)行持久化操作(如寫磁盤升薯、寫DB)莱褒。

? ? ? ? 有些時(shí)候因?yàn)闃I(yè)務(wù)要求,需要添加一些非數(shù)據(jù)庫(kù)實(shí)體類的字段涎劈,用來(lái)存儲(chǔ)臨時(shí)數(shù)據(jù)广凸。此時(shí),可以使用@Transient注解來(lái)標(biāo)注這些字段蛛枚。因?yàn)锧Transient標(biāo)注的字段只是用來(lái)臨時(shí)存數(shù)據(jù)的谅海,在數(shù)據(jù)庫(kù)表中,沒(méi)有相應(yīng)的字段映射蹦浦,因此扭吁,ORM框架將忽略該屬性。

兩者區(qū)別:

從上面的介紹可知盲镶,被transient關(guān)鍵字修飾的域 在 Serializable 序列化 和DB過(guò)程中不會(huì)起作用侥袜;

而被@Transient注解標(biāo)注的域僅僅在DB過(guò)程中不被序列化,這是兩者最大的區(qū)別溉贿。

使用注意事項(xiàng):

1)使用transient關(guān)鍵字修飾某個(gè)對(duì)象的域時(shí)枫吧,一定要確保該對(duì)象實(shí)現(xiàn)了Serializable接口,不然不起作用

2)對(duì)static域不管使不使用transient關(guān)鍵字修飾宇色,該靜態(tài)域都不會(huì)被序列化


(2)對(duì)Java浮點(diǎn)型的理解

? ? ? ?總所周知九杂,在Android 開(kāi)發(fā)過(guò)程中盡量少進(jìn)行浮點(diǎn)型運(yùn)算蘸吓,一是性能問(wèn)題维哈,二是精度損失。計(jì)算機(jī)的運(yùn)算都是采用二進(jìn)制進(jìn)行的邮绿,因此抢蚀,計(jì)算機(jī)表示浮點(diǎn)型都存在精度限制镀层,會(huì)導(dǎo)致一系列問(wèn)題,如判斷兩個(gè)float型數(shù)據(jù)是否相等思币、double型數(shù)據(jù)保留兩位小數(shù)鹿响。

1)判斷兩個(gè)float型數(shù)據(jù)相等常用辦法

一般不會(huì)直接使用“==”或“!=”進(jìn)行判斷羡微,而是直接使用兩個(gè)float的絕對(duì)差值是否大于0谷饿,進(jìn)行判斷,如下:

判斷兩個(gè)float型數(shù)據(jù)是否相等

不是判斷Math.abs(xx)>0 就可以了嗎妈倔,為什么還要弄一個(gè)1e-6博投?

原因:在實(shí)際過(guò)程中,允許一定的精度誤差盯蝴,1e-6就是自己定義的一個(gè)可接受的誤差范圍

2)double型數(shù)據(jù)保留n位小數(shù)

double型數(shù)據(jù)保留n位小數(shù)

具體原理毅哗,大家可以參考下面這篇博文 java保留兩位小數(shù)听怕。


(3)Collections.unmodifiableSet/List/Map工具方法

? ? ? ?Collections 工具類主要針對(duì)Set、List虑绵、Map等集合尿瞭,提供了大量方法,如排序翅睛、查詢声搁、修改,另外還提供了將集合對(duì)象置為不可變捕发、對(duì)集合對(duì)象實(shí)現(xiàn)同步控制等方法疏旨。

? ? ? 本文只講Collections將集合對(duì)象設(shè)置成為不可變對(duì)象。

目標(biāo)集合 :Set扎酷、List檐涝、Map三個(gè)集合

(1)emptyXxx()

? ? ? ? ?返回一個(gè)空的、不可變的集合對(duì)象法挨;

(2)singletonXxx()

? ? ? ? ?返回一個(gè)只包含指定對(duì)象(只有一個(gè)或一個(gè)元素)的不可變的集合對(duì)象谁榜;

(3)unmodifiableXxx()

? ? ? ? ?返回指定集合對(duì)象的不可變視圖;

舉例:

例子

sData 后面就不能進(jìn)行add 凡纳,remove等操作了惰爬。


(4)是否一定要使用注解代替枚舉

?1)常量方式

常量方式

常量方式缺點(diǎn):類型不安全,方法調(diào)用者

使用者可以隨意傳入downloadScene值惫企,有可能誤傳撕瞧,導(dǎo)致相關(guān)功能失效

2)枚舉方式

枚舉作為值限定狀態(tài)

枚舉將常量組織起來(lái),便于統(tǒng)一管理

枚舉方式缺點(diǎn):枚舉存在性能問(wèn)題狞尔,Google Android 不建議使用枚舉(后面解釋)

枚舉定義
RadioDownloadActionSheet()函數(shù)調(diào)用

3)Interface方式實(shí)現(xiàn)


接口中成員變量丛版,默認(rèn)是 public static final 型;將其定義成接口方式偏序,也可以達(dá)到控制常量范圍的作用页畦。

定義成接口方式

4)注解方式

注解方式

按照上面的說(shuō)法,是不是都需要將枚舉型更換成注解型了研儒?

回答當(dāng)然是:NO

枚舉不添加任何方法豫缨,枚舉值默認(rèn)從0開(kāi)始,但是有些時(shí)候需要將枚舉常量與數(shù)據(jù)關(guān)聯(lián)起來(lái)

當(dāng)枚舉常量需要和數(shù)據(jù)關(guān)聯(lián)時(shí)候端朵,直接使用枚舉簡(jiǎn)單有效

如:企鵝FM音速?gòu)棇硬藛魏冒牛枰峁?.5倍、1倍冲呢、1.5倍舍败、2倍播放速度

此時(shí),枚舉定義及相關(guān)數(shù)據(jù)轉(zhuǎn)化都相當(dāng)方便(如圖所示)

關(guān)于枚舉性能問(wèn)題

大家可以去看看

Manage Your App's Memory(最新)

枚舉帶來(lái)的性能問(wèn)題可以忽略

明顯指出enum性能問(wèn)題

? ? ? ?綜上可知,除了方法1)之外邻薯,我們可以根據(jù)適合的場(chǎng)景選擇合適的方法裙戏,在代碼出錯(cuò)率、性能厕诡、優(yōu)雅程度方面達(dá)到一個(gè)平衡累榜。


(5)Object.toString( )和String.valueOf(Object ?value)

? ? ? ?在Android 開(kāi)發(fā)中,很多時(shí)候需要將Object對(duì)象轉(zhuǎn)換成String灵嫌,目前一般有三種處理方法信柿,分別是Object.toString()/valueOf(Object)/(String)Object ( 強(qiáng)轉(zhuǎn)不推薦)。

1)Object.toString( )

需要保證Object非空 醒第,不然會(huì)導(dǎo)致np(NullPointerException)問(wèn)題

2) valueOf(Object ?value)

放心大膽直接使用valueOf()渔嚷,原因如圖所示,valueOf()為String 的一個(gè)靜態(tài)方法稠曼,內(nèi)部已經(jīng)做了判空處理形病,不用擔(dān)心np問(wèn)題的發(fā)生

String.valueOf() 源碼

ValueOf()速度問(wèn)題,可以忽略


(6)對(duì)象創(chuàng)建原則


對(duì)象創(chuàng)建主要有以下幾點(diǎn):

1)該對(duì)象是否需要設(shè)計(jì)成單例霞幅;

2)對(duì)象在使用時(shí)漠吻,再創(chuàng)建(懶加載原則)

3)對(duì)象創(chuàng)建,最好不要放在for司恳、while等循環(huán)中及重復(fù)調(diào)用的方法中


(7)私有構(gòu)造函數(shù)的妙用

總所周知:java是允許寫私有構(gòu)造函數(shù)的途乃;java類默認(rèn)有一個(gè)不帶參數(shù)的public構(gòu)造函數(shù);

使用private修飾構(gòu)造函數(shù)的目的扔傅,就是使該類無(wú)法在其他類中實(shí)例化(防止實(shí)例化)耍共。

目前主要使用在:?jiǎn)卫J健uilder模式及一些方法工具類中(防止其他使用者濫用)

? 暫時(shí)就寫這么多了 猎塞,歡迎大家指出不足之處或錯(cuò)誤试读,^_^!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荠耽,隨后出現(xiàn)的幾起案子钩骇,更是在濱河造成了極大的恐慌,老刑警劉巖铝量,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倘屹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡慢叨,警方通過(guò)查閱死者的電腦和手機(jī)纽匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)插爹,“玉大人哄辣,你說(shuō)我怎么就攤上這事请梢≡玻” “怎么了力穗?”我有些...
    開(kāi)封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)气嫁。 經(jīng)常有香客問(wèn)我当窗,道長(zhǎng),這世上最難降的妖魔是什么寸宵? 我笑而不...
    開(kāi)封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任崖面,我火速辦了婚禮,結(jié)果婚禮上梯影,老公的妹妹穿的比我還像新娘巫员。我一直安慰自己,他們只是感情好甲棍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布简识。 她就那樣靜靜地躺著,像睡著了一般感猛。 火紅的嫁衣襯著肌膚如雪七扰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天陪白,我揣著相機(jī)與錄音颈走,去河邊找鬼。 笑死咱士,一個(gè)胖子當(dāng)著我的面吹牛立由,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播序厉,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拆吆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了脂矫?” 一聲冷哼從身側(cè)響起枣耀,我...
    開(kāi)封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庭再,沒(méi)想到半個(gè)月后捞奕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拄轻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年颅围,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨搓。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡院促,死狀恐怖筏养,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情常拓,我是刑警寧澤渐溶,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站弄抬,受9級(jí)特大地震影響茎辐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掂恕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一拖陆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懊亡,春花似錦依啰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至艰争,卻和暖如春坏瞄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甩卓。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工鸠匀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逾柿。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓缀棍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親机错。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爬范,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 一青瀑、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,268評(píng)論 0 16
  • Java 語(yǔ)言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,350評(píng)論 0 10
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 11,005評(píng)論 6 13
  • 不得不說(shuō)萧诫,我的鑫兒男友力max斥难。 新鄉(xiāng),地圖上在河南靠北的地方帘饶,南陽(yáng)哑诊,處于河南的南部,南北隔著及刻,相見(jiàn)寥寥镀裤。這個(gè)五一...
    冬梔閱讀 561評(píng)論 2 5
  • 謙虛低調(diào)一向被我們視為美德竞阐,在我們很小的時(shí)候,無(wú)論是課本上還是父母和老師的教誨中暑劝,經(jīng)常會(huì)提到“虛心使人進(jìn)步骆莹,驕傲使...
    恣意生活閱讀 697評(píng)論 8 41