Android源碼中final關鍵字的用法

最近在研究View的事件的分發,在看代碼的時候,經常會發現源碼中有很多的將全局變量賦值給局部變量,並且在前面添加final的情況,對於Google這樣的代碼產生疑惑,直接用就是了,搜了一下,發現很多人出現了和我一樣的疑惑。

首先解釋一下局部變量和final:

局部變量:類的方法中的變量

final:使用final修飾的類不可繼承,final修飾的方法不可重寫,final修飾的變量只能賦值一次(如果是基本數據類型的變量,則其數值一旦在初始化之後便不能更改;如果是引用類型的變量,則在對其初始化之後便不能再讓其指向另一個對象。


下面是View源代碼中的overScrollBy()方法中的源碼:




第一張圖:將全局變量(基本數據類型)賦值給局部變量

第二張圖:將全局變量(引用數據類型)賦值給局部變量

雖然有上面的兩種種類型,不過道理都是一樣的,一個是值,一個是引用的地址


解釋1將全局變量賦給一個局部變量

只是爲了取得 在程序運行過程中,該全局變量的當前時刻的值!請看第一張圖,這個overScrollBy(),會在View滑動的時候多次調用,那麼這樣賦值轉換僅僅是想知道當前調用時,這個全局變量當前的值。


解釋2:在局部變量前添加final

想一種情況,如果在運行這個方法的時候,隨意改變了這個局部變量的值,那麼我這個局部變量對應的就不是我所取得那個時刻值了。如果加上final的話,在該局部代碼塊中,就不能以任何方式去更改這個引用變量的值了,這樣,下面代碼的運行安全就有了保障!但在其他代碼塊裏,仍然可以有其他語句去更改那個全局變量的值!


總結:
     這段小插曲的作用,其實就是對全局變量取一次樣,就像在特定時刻取一次樣品,來做實驗一樣,來做一些事情。取得的樣品當然不希望中途變質,要讓它final,才能正常使用。而全局變量就任由他繼續變化去吧。。。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章