文章編號:11610時間:2024-10-01人氣:
內(nèi)部類是嵌套在另一個類內(nèi)部的類定義,其種類包括成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類與匿名內(nèi)部類。 接下來,將詳細介紹每種內(nèi)部類的特點、使用方式、應(yīng)用場景,并提供代碼示例。 成員內(nèi)部類的特點在于它可以在外部類的成員位置定義,可以擁有任意訪問修飾符。 成員內(nèi)部類的實例可以訪問外部類的私有成員,但外部類不能直接訪問成員內(nèi)部類的實例。 靜態(tài)內(nèi)部類,也稱為靜態(tài)嵌套類,使用 static 關(guān)鍵字聲明,意味著它不是外部類實例的屬性,而是屬于整個類文件級別的。 靜態(tài)內(nèi)部類實例可以訪問外部類的靜態(tài)成員,但外部類不能直接訪問靜態(tài)內(nèi)部類實例。 局部內(nèi)部類在方法、代碼塊或其他局部作用域內(nèi)定義,其作用域僅限于定義它的局部區(qū)域。 局部內(nèi)部類可以訪問外部類的私有成員,但不能訪問外部類的靜態(tài)成員。 匿名內(nèi)部類沒有名字,通過在方法參數(shù)列表中定義并立即實例化,通常用于實現(xiàn)接口或繼承類,提供一種靈活的實現(xiàn)策略。 例如,創(chuàng)建一個簡單的Java Swing GUI應(yīng)用程序,包含一個按鈕,可以通過匿名內(nèi)部類實現(xiàn)按鈕的點擊事件處理。 總結(jié),內(nèi)部類提供了強大的封裝和代碼復(fù)用能力,不同種類的內(nèi)部類適用于不同場景。 正確理解它們的特點與用法,可以幫助開發(fā)者構(gòu)建更加高效、可維護的代碼結(jié)構(gòu)。
匿名內(nèi)部類的特點:1,一個類用于繼承其他類或是實現(xiàn)接口,并不需要增加額外的方法,只是對繼承方法的事先或是覆蓋。 2,只是為了獲得一個對象實例,不需要知道其實際類型。 3,類名沒有意義,也就是不需要使用到。 public class Outer { private static int i = 1; private int j = 10; public static void outer_f1(){ } public void outer_f2(){ }// 靜態(tài)內(nèi)部類可以用public,protected,private修飾// 靜態(tài)內(nèi)部類中可以定義靜態(tài)或者非靜態(tài)的成員 static class Inner{static int inner_i = 100;int inner_j = 200;static void inner_f1(){ (Outer.i+i);//靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員 outer_f1();//包括靜態(tài)變量和靜態(tài)方法}void inner_f2(){// (Outer.i+j);//靜態(tài)內(nèi)部類不能訪問外部類的非靜態(tài)成員// outer_f2();//包括非靜態(tài)變量和非靜態(tài)方法} } public void outer_f3(){//外部類訪問內(nèi)部類的靜態(tài)成員:內(nèi)部類.靜態(tài)成員(_i);_f1();//外部類訪問內(nèi)部類的非靜態(tài)成員:實例化內(nèi)部類即可Inner inner = new Inner();_f2(); } public static void main(string[] args) {new Outer()_f3(); }}注:一個匿名內(nèi)部類一定是在new的后面,用其隱含實現(xiàn)一個接口或?qū)崿F(xiàn)一個類,沒有類名,根據(jù)多態(tài),我們使用其父類名。 因他是局部內(nèi)部類,那么局部內(nèi)部類的所有限制都對其生效。 匿名內(nèi)部類是唯一一種無構(gòu)造方法類。 大部分匿名內(nèi)部類是用于接口回調(diào)用的。 匿名內(nèi)部類在編譯的時候由系統(tǒng)自動起名Out$。 如果一個對象編譯時的類型是接口,那么其運行的類型為實現(xiàn)這個接口的類。 因匿名內(nèi)部類無構(gòu)造方法,所以其使用范圍非常的有限。 當需要多個對象時使用局部內(nèi)部類,因此局部內(nèi)部類的應(yīng)用相對比較多。 匿名內(nèi)部類中不能定義構(gòu)造方法。 如果一個對象編譯時的類型是接口,那么其運行的類型為實現(xiàn)這個接口的類。
匿名類可以使你的代碼更加簡潔 (JDK8之后Lambda更簡潔)。
定義一個類的同時對其進行實例化。
它與局部類很相似,不同的是它沒有類名,如果某個局部類你只需要使用一次,就可以使用匿名類代替局部類。
匿名類是表達式,而非常規(guī)的類
匿名類的使用場景:一個局部類只需要使用一次的時候
由于匿名類沒有類名,那么除了定義它的地方,其他地方無法調(diào)用,所以匿名類也可以叫匿名內(nèi)部類
匿名類實現(xiàn)HelloWorld接口并創(chuàng)建了實例化對象:frenchGreeting */ HelloWorld frenchGreeting = new HelloWorld() { String name = 無參;
@Override public void greet() { greetSomeone(name); }
@Override public void greetSomeone(String someone) { name = someone; (匿名類: + name); } };
// 匿名類:無參方法 (); // 匿名類:帶參方法 (帶參);
###匿名類繼承父類 (匿名子類)```jspublic class ExtendTest {public static void main(String[] args) {String name = 李四;// 創(chuàng)建父類對象,打印原始name值PartherClass partherClass = new PartherClass();(父類的getName方法= + ());// 使用匿名類繼承父類,并打印name值PartherClass pc = new PartherClass(name){@Overridepublic String getName(){return 匿名類 - +();}};(());}}class PartherClass{private String name = 張三;public PartherClass(){}public PartherClass(String name){ = name;}public String getName(){return ;}}局部類public class HelloWorldAnonymousClasses {interface HelloWorld {public void greet();public void greetSomeone(String someone);}/** * 1、局部類:EnglishGreeting實現(xiàn)了HelloWorld接口 */class EnglishGreeting implements HelloWorld {String name = 無參;@Overridepublic void greet() {greetSomeone(name);}@Overridepublic void greetSomeone(String someone) {name = someone;(局部類: + name);}}// 創(chuàng)建局部類EnglishGreeting的實例化對象,使用接口類型接收HelloWorld englishGreeting = new EnglishGreeting();// 局部類:無參方法();// 局部類:帶參方法(帶參);匿名類的擴展:Java的lambda表達式 (Lambda表達式本身就是一個接口的實現(xiàn))Lambda 表達式的作用其實就是匿名方法,而 Java 中并沒有匿名方法這一語法。 不過 Java 中有匿名對象, 當你直接 new 一個接口并實現(xiàn)接口方法的時候,Java 編譯器實際是產(chǎn)生了一個類(匿名類)來實現(xiàn)這個接口,然后再返回這個類的一個實例, 也就是匿名對象;
匿名類實現(xiàn)方式:@FunctionalInterfaceinterface HelloWorldFunction {void doSomeWork();}//new 一個接口并實現(xiàn)接口方法的時候,Java 編譯器實際是產(chǎn)生了一個類 匿名類 來實現(xiàn)這個接口staticHelloWorldFunction helloWorldFunction = new HelloWorldFunction() {@Overridepublic void doSomeWork() {(doSomeWork--);}};函數(shù)式編程實現(xiàn)方式:static HelloWorldFunction helloWorldFunction = ()-> (doSomeWork--);箭頭函數(shù)(箭頭函數(shù)就是lambda表達式,提供了更簡潔的function定義方式)Lambda 表達式的主要形式是如下定義,符號的左側(cè)是參數(shù),右側(cè)是表達式或語句塊。(參數(shù)列表) => { 語句塊 }(參數(shù)列表) => 語句// 一條語句java lamda 表達式(將匿名函數(shù)復(fù)制給變量的簡寫方式的函數(shù)稱為 lambda 表達式**。)@FunctionalInterfacepublic interface WorkerInterface {public void doSomeWork();}public class WorkerInterfaceTest {public static void execute(WorkerInterface worker) {();}public static void main(String [] args) {//invoke doSomeWork using Annonymous classexecute(new WorkerInterface() {@Overridepublic void doSomeWork() {(Worker invoked using Anonymous class);}});//invoke doSomeWork using Lambda expressionexecute( () -> (Worker invoked using Lambda expression) );}}函數(shù)式接口
1)Java8中Iterable的foreach(Comsumer action)的函數(shù)式接口 2)Java8中Iteror的forEachRemaining(Comsumer action)的函數(shù)式接口 3)Java8中函數(shù)式接口Predicate;Collections的removeIf(Predicate filter)
javascript 箭頭函數(shù)var fun1 = funcation(int x,int y){return (x+y);}簡寫如下:
var fun1 = (x,y)=>x+y;結(jié)論:- 箭頭函數(shù)適合于無復(fù)雜邏輯或者無副作用的純函數(shù)場景下,例如用在map、reduce、filter的回調(diào)函數(shù)定義中;不要在最外層定義箭頭函數(shù),因為在函數(shù)內(nèi)部操作this會很容易污染全局作用域。最起碼在箭頭函數(shù)外部包一層普通函數(shù),將this控制在可見的范圍內(nèi);
參考:02、Java的lambda表達式和JavaScript的箭頭函數(shù) - 掘金 ()
原文:Java內(nèi)部類分四種,成員內(nèi)部類、局部內(nèi)部類、內(nèi)部類和匿名內(nèi)部類:1、內(nèi)部類用法特點, 靜態(tài)內(nèi)部類定義在類中,任何方法外,用static定義,注意靜態(tài)內(nèi)部類中可以定義靜態(tài)或者非靜態(tài)的成員。 2、匿名內(nèi)部類,匿名內(nèi)部類是一種特殊的局部內(nèi)部類,它是通過匿名類實現(xiàn)接口。 匿名內(nèi)部類的用法特點:1、一個類用于繼承其他類或是實現(xiàn)接口,并不需要增加額外的方法,只是對繼承方法的事先或是覆蓋。 2、只是為了獲得一個對象實例,不需要知道其實際類型。 3、類名沒有意義,也就是不需要使用到。
內(nèi)部類一、定義:在一個類內(nèi)部定義的類。 二、類型:成員內(nèi)部類、局部內(nèi)部類(也叫方法內(nèi)部類)、匿名內(nèi)部類、靜態(tài)嵌套類。 三、用法a)四種內(nèi)部類的共性i.內(nèi)部類仍然是一個獨立的類,在編譯后內(nèi)部類會被編譯成獨立的文件,只是在前面加上外部類的類名和$符號。 ii.內(nèi)部類不能用普通的方式訪問。 內(nèi)部類是外部類的一個成員,因此內(nèi)部類可以自由訪問外部類的成員變量,無論是否是private的。 iii.內(nèi)部類的this引用:內(nèi)部類中同樣使用this.成員變量,如要使用外部類的成員變量,則使用外部類.成員變量。 b)四種內(nèi)部類的區(qū)別i.成員內(nèi)部類:它相當于外部類的一個成員變量或方法,可用修飾符為final、abstract、public、private、protected、strictfp和static。 形式如下class Outer { class Inner{}}編譯上述代碼會產(chǎn)生兩個文件,和Outer$。 成員內(nèi)部類內(nèi)不允許有任何靜態(tài)聲明!能夠訪問成員內(nèi)部類的途徑是通過外部類的對象或外部類中非靜態(tài)的方法。 //外部類class Outer { //內(nèi)部類 class Inner {//內(nèi)部類的方法public void myInner() { (“Inner class”);} } //非靜態(tài)方法訪問內(nèi)部類 public void getInner() { Inner in = new Inner(); (); } //外部訪問內(nèi)部類 pulblic static void main(String args[]) { Outer out = new Outer(); in = Inner(); (); }}ii.局部內(nèi)部類(方法內(nèi)部類):在外部類的某個方法內(nèi)定義的類,與成員內(nèi)部類不同,它相當于外部類的一個局部變量,修飾符只有final和abstract。 1.只能在定義該內(nèi)部類的方法內(nèi)實例化,不可以在此方法外對其實例化。 2.局部內(nèi)部類對象不能使用該內(nèi)部類所在方法的非final局部變量。 因為方法的局部變量位于棧上,只存在于該方法的生命期內(nèi)。 當一個方法結(jié)束,其棧結(jié)構(gòu)被刪除,局部變量成為歷史。 但是該方法結(jié)束后,在方法內(nèi)創(chuàng)建的內(nèi)部類對象可能仍然存在于堆中!例如,如果對它的引用被傳遞到其他某些代碼,并存儲在一個成員變量內(nèi)。 正因為不能保證局部變量的存活期和方法內(nèi)部類對象的一樣長,所以內(nèi)部類對象只能使用所在方法中被定義為final的局部變量。 3.靜態(tài)方法內(nèi)的局部內(nèi)部類沒有this的引用。 a)示例:class Outer { public void doSomething() {final int a = 10;class Inner { public void myInner() {(a); }} }}iii.匿名內(nèi)部類:沒有名字的內(nèi)部類。 1.繼承式的匿名內(nèi)部類class Car { public void drive() {(“Driving a car!”); }}class Temp { public static void main(String[] args) {Car car = new Car() { pulbic void drive() {(“Driving another car!”); }};(); }}2.接口式的匿名內(nèi)部類interface Face { public void drive();}class Temp { public static void main(String[] args) {Face face = new Face() { public void drive() {(); }};(); }}3.參數(shù)匿名內(nèi)部類:顧名思義,將匿名內(nèi)部類當成參數(shù)使用。 iv.靜態(tài)嵌套類:從技術(shù)上講,靜態(tài)嵌套類不屬于內(nèi)部類。 因為內(nèi)部類與外部類共享一種特殊關(guān)系,更確切地說是對實例的共享關(guān)系。 而靜態(tài)嵌套類則沒有上述關(guān)系。 它只是位置在另一個類的內(nèi)部。 因此也被稱為頂級嵌套類。 靜態(tài)的含義是該內(nèi)部類可以像其他靜態(tài)成員一樣,沒有外部類對象時,也能夠訪問它。 靜態(tài)嵌套類不能訪問外部類的成員和方法。 class Outer { static class Inner{}}class Temp { public static void main(String[] args) { n = new (); }}
內(nèi)容聲明:
1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請聯(lián)系我們進行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請聯(lián)系我們進行舉報處理!
4、本文地址:http://m.hudongshop.com/article/1898b0609ffd8f59e854.html,復(fù)制請保留版權(quán)鏈接!
前言在今天的快節(jié)奏數(shù)字世界中,保持網(wǎng)站的領(lǐng)先地位至關(guān)重要,F(xiàn)lash特效是吸引和吸引受眾的強大工具,可以提升網(wǎng)站的視覺吸引力并提供引人入勝的用戶體驗,通過了解最新的Flash特效趨勢,您可以確保您的網(wǎng)站在競爭中脫穎而出,F(xiàn)lash特效的最新趨勢Flash特效領(lǐng)域正在不斷發(fā)展,涌現(xiàn)了許多激動人心的新趨勢,1.交互動效交互式效果使Flas...。
本站公告 2024-10-01 08:38:26
HTML編輯器是Web開發(fā)者不可或缺的工具,它可以幫助你快速高效地編寫和編輯HTML代碼,市面上有各種各樣的HTML編輯器,每種都有自己獨特的優(yōu)點和缺點,本文將比較一些最流行的HTML編輯器,以幫助你針對你的特定需求選擇最佳的一個,選擇HTML編輯器的標準在選擇HTML編輯器時,需要考慮以下幾個因素,特性文檔和支持,包括在線論壇和社區(qū)...。
技術(shù)教程 2024-09-29 23:32:20
Linux文件系統(tǒng),深入探索存儲和組織Linux是一個操作系統(tǒng),以其穩(wěn)定性、安全性、多功能性和開源性而聞名,它廣泛應(yīng)用于服務(wù)器、工作站和嵌入式系統(tǒng)等各種平臺,Linux文件系統(tǒng)是Linux操作系統(tǒng)的一個至關(guān)重要的組成部分,它負責(zé)管理和組織存儲在計算機上的數(shù)據(jù),文件系統(tǒng)概述文件系統(tǒng)是一種邏輯結(jié)構(gòu),用于組織和管理計算機存儲設(shè)備上的數(shù)據(jù),它...。
技術(shù)教程 2024-09-26 16:28:52
什么是優(yōu)化單選按鈕,優(yōu)化單選按鈕是指專門針對移動設(shè)備進行調(diào)整,以提供最佳用戶體驗,這意味著確保單選按鈕足夠大,以便于點擊,并且它們之間有足夠的間距,以避免意外選擇,優(yōu)化單選按鈕對于移動體驗非常重要,因為它們是用戶在移動設(shè)備上與應(yīng)用程序或網(wǎng)站交互的主要方式之一,如果單選按鈕難以使用,用戶可能會感到沮喪并放棄任務(wù),優(yōu)化單選按鈕的最佳實踐優(yōu)...。
最新資訊 2024-09-14 17:59:01
在現(xiàn)代軟件開發(fā)中,構(gòu)建靈活、可擴展和可維護的數(shù)據(jù)解決方案至關(guān)重要,對象數(shù)據(jù)庫作為傳統(tǒng)關(guān)系數(shù)據(jù)庫的替代方案,提供了一種強大的方式來管理和操作數(shù)據(jù),尤其是在需要處理復(fù)雜對象和關(guān)系的場景中,對象數(shù)據(jù)庫的基礎(chǔ)對象數(shù)據(jù)庫是一種非關(guān)系型數(shù)據(jù)庫,它使用面向?qū)ο缶幊蹋琌OP,原則來存儲和檢索數(shù)據(jù),它存儲的是對象,而不是像關(guān)系數(shù)據(jù)庫中那樣的行和列,每個...。
本站公告 2024-09-12 23:57:10
引言虛擬機,VM,在現(xiàn)代計算中扮演著至關(guān)重要的角色,為各種應(yīng)用程序和操作系統(tǒng)提供了一個隔離和可移植的執(zhí)行環(huán)境,其中,Java虛擬機,JVM,是運行Java字節(jié)碼的流行選擇,而其他虛擬機技術(shù),例如Hypervisor、KVM和Docker,也提供了各自的優(yōu)勢,本文將對Java虛擬機進行全面的比較,了解它們的特點、優(yōu)勢、劣勢和最佳用例,以...。
最新資訊 2024-09-12 23:00:55
簡介在線源代碼是一個托管平臺,允許開發(fā)人員在線協(xié)作、查看和分享項目源代碼,它為開發(fā)團隊提供了許多好處,包括,改進的代碼協(xié)作加快的開發(fā)時間提高代碼質(zhì)量增強的項目可視性改進的代碼協(xié)作在線源代碼允許開發(fā)人員實時協(xié)作項目,無論他們的位置如何,他們可以共享代碼更改、留下評論和解決問題,所有這些都記錄在版本歷史中,這大大提高了代碼協(xié)作的效率和透明...。
互聯(lián)網(wǎng)資訊 2024-09-12 10:25:16
隨著網(wǎng)絡(luò)安全威脅的不斷增長,企業(yè)面臨的風(fēng)險也越來越大,漏洞是網(wǎng)絡(luò)安全中的一大威脅,它可能導(dǎo)致數(shù)據(jù)泄露、系統(tǒng)中斷甚至財務(wù)損失,因此,定期進行漏洞檢測非常重要,以便及時發(fā)現(xiàn)和修復(fù)漏洞,傳統(tǒng)的人工漏洞檢測過程非常耗時且容易出錯,為了提高效率和準確性,越來越多的企業(yè)開始采用自動化漏洞檢測解決方案,自動化漏洞檢測的好處與傳統(tǒng)的手工漏洞檢測相比,...。
互聯(lián)網(wǎng)資訊 2024-09-09 17:53:56
什么是C語言,C語言是一種通用、過程化、強類型語言,由丹尼斯·里奇在20世紀70年代早期設(shè)計,它以其簡單、效率和靈活性而聞名,廣泛應(yīng)用于編寫操作系統(tǒng)、數(shù)據(jù)庫和嵌入式系統(tǒng),C語言編程步驟設(shè)計和編寫C程序涉及以下步驟,1.理解問題需要清楚地理解要解決的問題,確定程序的目標、輸入和輸出要求至關(guān)重要,2.設(shè)計算法和數(shù)據(jù)結(jié)構(gòu)一旦理解了問題,就需...。
互聯(lián)網(wǎng)資訊 2024-09-08 15:21:52
引言正則表達式是一種強大的工具,可以幫助我們在各種語言環(huán)境中處理文本,在中文處理中,正則表達式尤為有用,因為它可以幫助我們處理復(fù)雜的多字節(jié)字符集和豐富的語法結(jié)構(gòu),本文將提供一個綜合的指南,幫助您從對正則表達式的基本了解到在中文處理中熟練使用它們,我們將涵蓋從正則表達式基礎(chǔ)到高級中文處理技術(shù)的各個方面,正則表達式基礎(chǔ)字符類字符類是正則表...。
本站公告 2024-09-07 13:58:37
調(diào)試器是一種軟件工具,可幫助查找和解決代碼中的錯誤,它可以通過交互式地執(zhí)行代碼,并以可視化的方式顯示變量的值和程序的狀態(tài)來實現(xiàn),調(diào)試器的功能調(diào)試器提供了一系列功能,幫助開發(fā)人員更輕松地調(diào)試代碼,設(shè)置斷點,在特定行或條件下暫停代碼執(zhí)行,逐行步進,一次執(zhí)行一行代碼,并觀察變量值的變化,檢查變量,在代碼執(zhí)行期間實時查看變量的值,調(diào)試異常,處...。
本站公告 2024-09-06 12:24:24
隨著數(shù)據(jù)量的激增,機器學(xué)習(xí),ML,已成為現(xiàn)代決策制定和數(shù)據(jù)分析的重要組成部分,JavaScript,JS,,作為一種流行的腳本語言,在ML的各個方面發(fā)揮著至關(guān)重要的作用,JavaScript賦能ML的優(yōu)勢JavaScript為ML提供以下優(yōu)勢,交互動態(tài)性,JS是高度互動和動態(tài)的,允許開發(fā)實時應(yīng)用程序,根據(jù)用戶輸入和數(shù)據(jù)變化做出快速響應(yīng)...。
互聯(lián)網(wǎng)資訊 2024-09-05 10:09:16