在日常的學(xué)習(xí)、工作,、生活中,肯定對各類范文都很熟悉吧,。相信許多人會覺得范文很難寫,?以下是小編為大家收集的優(yōu)秀范文,歡迎大家分享閱讀,。
java中final關(guān)鍵字篇一
面向?qū)ο蟪绦蛟O(shè)計的學(xué)習(xí)心得
推薦度:
歐式家具特點(詳解)
推薦度:
寫給對象的跨年文案
推薦度:
《面向個體的教育》的心得體會
推薦度:
面向?qū)W院的活動策劃書
推薦度:
相關(guān)推薦
在java中通過final關(guān)鍵字來聲明對象具有不變性(immutable),,這里的對象包括變量,方法,,類,,與c++中的const關(guān)鍵字效果類似。
immutable指對象在創(chuàng)建之后,,狀態(tài)無法被改變
可以從三個角度考慮使用final關(guān)鍵字:
代碼本身:不希望final描述的對象所表現(xiàn)的含義被改變 安全:final對象具有只讀屬性,,是線程安全的 效率:無法修改final對象本身,對其引用的操作更為高效
final 變量
定義final object a,,則a只能被初始化一次,,一旦初始化,a的數(shù)據(jù)無法修改,,若a為引用類型,,則不能重新綁定其他對象。
未被初始化的final變量被稱為blank final,,若為成員變量,,則必須被初始化或在構(gòu)造器中賦值。
例子:
class circle { static final double pi = 3.1415926; final int radius = 5; final int xpos; final int ypos; public circle(int x, int y) { xpos = x; ypos = y; }}
final 方法
定義final method,,則該方法無法被重載,,方法設(shè)計者不希望由于對方法的重載導(dǎo)致其他相關(guān)功能出現(xiàn)異常。
例子:
class baseclass { public final void method() {}}class derivedclass extends baseclass { public final void method() {} // 編譯出錯}
需要注意的是,,final方法的定義不一定能夠產(chǎn)生inline的效果,因為方法是否inline取決于jvm的策略,,而非final關(guān)鍵字,,通過final的設(shè)計提高方法效率是不準確的,。
final 類
final class x定義的類x無法被繼承。
在java中,,string類被設(shè)計成final,,其定義如下
復(fù)制代碼 代碼如下:
public class final string extends object implements serializable, comparable
, charsequence
為什么string被設(shè)計成final? 一個string類的實例被初始化后,,其在堆上的內(nèi)容無法被改變,,string類提供的任何修改string對象的方法都只能夠產(chǎn)生一個新的string對象,大大簡化了對string的操作,,是代碼更易于閱讀和理解,; string final是實現(xiàn)string interning(值只有一份)的必要條件,因為通常代碼中存在大量的string對象,,不同的引用會指向相同的字符串空間,,若string不為final,則當一個字符串空間的內(nèi)容改變時,,所有的引用都需要知道這一情況,,這一機制的實現(xiàn)是十分復(fù)雜的,無疑會影響效率,。string interning能夠節(jié)省內(nèi)存空間,,同時也節(jié)省時間花銷; string只讀,,則不必擔心非常重要的內(nèi)容被篡改,。內(nèi)部類與final
在一個方法內(nèi)定義匿名內(nèi)部類時,,內(nèi)部類只能訪問方法內(nèi)的final類型變量,,使得java編譯器能夠提前捕獲變量的值,并在內(nèi)部類保存一份副本,,當方法銷毀時,,內(nèi)部類的內(nèi)存空間依然完整,。
例子:
public class wrapper { public static void main(string[] args) { // object obj = null; //編譯出錯 final object obj = null; new thread(new runnable() { public void run() { obj = "hello"; } }).start(); }}
ps:內(nèi)部匿名類無法訪問外面的非 final 的變量的問題
這個聽起來有點拗口,其實我更多的是想說 java 內(nèi)部類的一些特性,。
之所以會想起這個題目只要是最近在閱讀 jdk 源碼中關(guān)于 http keepalive 的代碼時,,其中一個源文件 無意中看到下面這段代碼。
final boolean result[] = {false};ileged(new egedaction() { public object run() { try { inetaddress a1 = ame(h1); inetaddress a2 = ame(h2); result[0] = (a2); } catch (unknownhostexception e) { } catch (securityexception e) { } return null; }});return result[0];
java 的匿名內(nèi)部類無法訪問對應(yīng)的函數(shù)的非 final 變量,。要想訪問外部的 local variable,, 這個variable 又必須要先定義成 fianl, 但是一定義成 final 就不能在匿名內(nèi)部類中修改這個變量的值,,所以要想匿名內(nèi)部類返回一些有用的值時不是那么的容易,。這段代碼使用了一個非常巧妙的方法,這里使用數(shù)組的方式繞過這個限制,雖然我們無法修改 result 這個變量的引用,,但是我們可以修改 result 指向的那個數(shù)組的內(nèi)容,。
只是想記錄一下內(nèi)部匿名類修改外部變量的一個小技巧。不過既然已經(jīng)到了這里,,不妨繼續(xù)的看看內(nèi)部類都有哪些特性或者限制吧,。
在繼續(xù)本文前,我覺得非常有必要的明確下本文中涉及的一些 java 術(shù)語,,這些術(shù)語不太好翻譯成中文,,所以我們還是用英文來描述。
// this is classpublic class javaterm { // field or member variable private int field; // constructor public javaterm() { } // method public void method() { // local variable int localvariable = 0; // local class class localclass { public localclass() { } } // anonymous class new runnable() { public void run() { } }; }}
我們今天更多的將關(guān)注于 local class 和 anonymous class,,它們都屬于 inner class,。
java 允許我們在一個 class 里面再定義一個 class, 稱為嵌套類(nested class), nested class 又可以分為兩類,,一類是 static nested class,, 另外一個是 non-static nested class, 又稱為 inner class,。inner class 又可以分為 local class 和 anonymous class,。
anonymous class 的一些限制
一個 anonymous class 可以訪問包含它的類的類變量(field/member variable) 一個 anonymous class 不能訪問包含它的作用于中的不是 final 的本地變量(local variable) 和 nested class 一樣,anonymous class 中定義的 variable 會覆蓋包含這個內(nèi)部類的作用域中的同名的 variable 你不能定義靜態(tài)的初始化方法 一個 anonymous class 可以有靜態(tài)的成員變量,。這個成員變量必須是常量(用 final 修飾),。 一個 anonymous class 不可以有構(gòu)造函數(shù)
s("content_relate");【java中通過final關(guān)鍵字面向?qū)ο蟮脑斀狻肯嚓P(guān)文章:
java中final關(guān)鍵字用法的講解
11-24
java面向?qū)ο笕筇卣髟斀?p>10-04java的面向?qū)ο?p>09-30java中class對象詳解10-01
java面向?qū)ο缶幊讨v解11-23
java面向?qū)ο缶幊痰姆椒ㄙY料12-06
php面向?qū)ο蟮哪g(shù)方法詳解09-07
java語言面向?qū)ο蟮?大特征01-19
java中finally關(guān)鍵字09-27