91夜夜人人揉人人捏人人添-91一区二区三区四区五区-91伊人久久大香线蕉-91在线电影-免费a网址-免费v片网站

當(dāng)前位置:網(wǎng)站首頁 >> 作文 >> 2023年java中final關(guān)鍵字實(shí)用

2023年java中final關(guān)鍵字實(shí)用

格式:DOC 上傳日期:2023-04-22 08:32:17
2023年java中final關(guān)鍵字實(shí)用
時(shí)間:2023-04-22 08:32:17     小編:zdfb

在日常的學(xué)習(xí)、工作、生活中,肯定對各類范文都很熟悉吧。相信許多人會(huì)覺得范文很難寫?以下是小編為大家收集的優(yōu)秀范文,歡迎大家分享閱讀。

java中final關(guān)鍵字篇一

面向?qū)ο蟪绦蛟O(shè)計(jì)的學(xué)習(xí)心得

推薦度:

歐式家具特點(diǎn)(詳解)

推薦度:

寫給對象的跨年文案

推薦度:

《面向個(gè)體的教育》的心得體會(huì)

推薦度:

面向?qū)W院的活動(dòng)策劃書

推薦度:

相關(guān)推薦

在java中通過final關(guān)鍵字來聲明對象具有不變性(immutable),這里的對象包括變量,方法,類,與c++中的const關(guān)鍵字效果類似。

immutable指對象在創(chuàng)建之后,狀態(tài)無法被改變

可以從三個(gè)角度考慮使用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è)計(jì)者不希望由于對方法的重載導(dǎo)致其他相關(guān)功能出現(xiàn)異常。

例子:

class baseclass { public final void method() {}}class derivedclass extends baseclass { public final void method() {} // 編譯出錯(cuò)}

需要注意的是,final方法的定義不一定能夠產(chǎn)生inline的效果,因?yàn)榉椒ㄊ欠駃nline取決于jvm的策略,而非final關(guān)鍵字,通過final的設(shè)計(jì)提高方法效率是不準(zhǔn)確的。

final 類

final class x定義的類x無法被繼承。

在java中,string類被設(shè)計(jì)成final,其定義如下

復(fù)制代碼 代碼如下:

public class final string extends object implements serializable, comparable

, charsequence

為什么string被設(shè)計(jì)成final? 一個(gè)string類的實(shí)例被初始化后,其在堆上的內(nèi)容無法被改變,string類提供的任何修改string對象的方法都只能夠產(chǎn)生一個(gè)新的string對象,大大簡化了對string的操作,是代碼更易于閱讀和理解; string final是實(shí)現(xiàn)string interning(值只有一份)的必要條件,因?yàn)橥ǔ4a中存在大量的string對象,不同的引用會(huì)指向相同的字符串空間,若string不為final,則當(dāng)一個(gè)字符串空間的內(nèi)容改變時(shí),所有的引用都需要知道這一情況,這一機(jī)制的實(shí)現(xiàn)是十分復(fù)雜的,無疑會(huì)影響效率。string interning能夠節(jié)省內(nèi)存空間,同時(shí)也節(jié)省時(shí)間花銷; string只讀,則不必?fù)?dān)心非常重要的內(nèi)容被篡改。

內(nèi)部類與final

在一個(gè)方法內(nèi)定義匿名內(nèi)部類時(shí),內(nèi)部類只能訪問方法內(nèi)的final類型變量,使得java編譯器能夠提前捕獲變量的值,并在內(nèi)部類保存一份副本,當(dāng)方法銷毀時(shí),內(nèi)部類的內(nèi)存空間依然完整。

例子:

public class wrapper { public static void main(string[] args) { // object obj = null; //編譯出錯(cuò) final object obj = null; new thread(new runnable() { public void run() { obj = "hello"; } }).start(); }}

ps:內(nèi)部匿名類無法訪問外面的非 final 的變量的問題

這個(gè)聽起來有點(diǎn)拗口,其實(shí)我更多的是想說 java 內(nèi)部類的一些特性。

之所以會(huì)想起這個(gè)題目只要是最近在閱讀 jdk 源碼中關(guān)于 http keepalive 的代碼時(shí),其中一個(gè)源文件 無意中看到下面這段代碼。

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, 這個(gè)variable 又必須要先定義成 fianl, 但是一定義成 final 就不能在匿名內(nèi)部類中修改這個(gè)變量的值,所以要想匿名內(nèi)部類返回一些有用的值時(shí)不是那么的容易。這段代碼使用了一個(gè)非常巧妙的方法,這里使用數(shù)組的方式繞過這個(gè)限制,雖然我們無法修改 result 這個(gè)變量的引用,但是我們可以修改 result 指向的那個(gè)數(shù)組的內(nèi)容。

只是想記錄一下內(nèi)部匿名類修改外部變量的一個(gè)小技巧。不過既然已經(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 允許我們在一個(gè) class 里面再定義一個(gè) class, 稱為嵌套類(nested class), nested class 又可以分為兩類,一類是 static nested class, 另外一個(gè)是 non-static nested class, 又稱為 inner class。inner class 又可以分為 local class 和 anonymous class。

anonymous class 的一些限制

一個(gè) anonymous class 可以訪問包含它的類的類變量(field/member variable) 一個(gè) anonymous class 不能訪問包含它的作用于中的不是 final 的本地變量(local variable) 和 nested class 一樣,anonymous class 中定義的 variable 會(huì)覆蓋包含這個(gè)內(nèi)部類的作用域中的同名的 variable 你不能定義靜態(tài)的初始化方法 一個(gè) anonymous class 可以有靜態(tài)的成員變量。這個(gè)成員變量必須是常量(用 final 修飾)。 一個(gè) 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-04

java的面向?qū)ο?p>09-30

java中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

全文閱讀已結(jié)束,如果需要下載本文請點(diǎn)擊

下載此文檔
你可能感興趣的文章
a.付費(fèi)復(fù)制
付費(fèi)獲得該文章復(fù)制權(quán)限
特價(jià):5.99元 10元
微信掃碼支付
已付款請點(diǎn)這里
b.包月復(fù)制
付費(fèi)后30天內(nèi)不限量復(fù)制
特價(jià):9.99元 10元
微信掃碼支付
已付款請點(diǎn)這里 聯(lián)系客服
主站蜘蛛池模板: 青青青国产免费线在 | 久久不卡一区二区三区 | 波多野结衣三区 | 2020国产大片天天看 | 曰曰碰天天碰国产 | 黄色在线免费观看 | 国精产品一区一区三区 | 第一页在线 | 国产黄色在线网站 | 欧美性最xxx | 性激烈的欧美三级视频中文字幕 | 午夜精品网站 | 天天摸天天舔天天操 | 国产欧美日韩在线播放 | 精品视频在线v | 黄视频网站在线看 | xxxx国产片 | 干亚洲美女 | 黄色永久网站 | 一级国产a级a毛片无卡 | 免费视频亚洲 | vod国产成人精品视频 | 在线视频第一页 | 国产精品福利小视频 | 男女猛烈无遮挡性视频 | 夜夜爽夜夜操 | 一级片免费在线观看 | 国产野外 | 美女网站18| 国产午夜精品不卡视频 | 亚洲欧美一区二区久久 | 欧美97| 国产特黄特色的大片观看免费视频 | 国产精品1区2区 | 色迷迷网免费站视频在线观看 | 在线免费观看日韩 | 亚洲欧美不卡中文字幕 | 伊人久久免费视频 | 97婷婷狠狠成为人免费视频 | 久久久亚洲精品国产 | 国产三级在线视频观看 |