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