文章編號:11612時間:2024-10-01人氣:
Lambda 表達式是 JDK8 的一個新特性,可以取代大部分的匿名內部類,寫出更優雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大地優化代碼結構。 JDK 也提供了大量的內置函數式接口供我們使用,使得 Lambda 表達式的運用更加方便、高效。
在創建線程并啟動時可以使用匿名內部類的寫法;
IntBinaryOperator是一個接口,使用匿名內部類的寫法調用該方法;
IntPredicate是一個接口。先使用匿名內部類的寫法調用該方法;
Function是一個接口,先使用匿名內部類的寫法調用該方法;
IntConsumer是一個接口,先使用匿名內部類的寫法調用該方法;
Stream將要處理的元素集合看作一種流,在流的過程中,借助Stream API對流中的元素進行操作。
Stream可以由數組或集合創建,對流的操作分為兩種:
Stream特性:
Stream創建方式有三種:
map,可以將一個流的元素按照一定的映射規則映射到另一個流中;
map,接收一個函數作為參數,該函數會被應用到每個元素上,并將其映射成一個新的元素。
filter,對流中的元素進行條件過濾,符合過濾條件的才能繼續留在流中;
filter,按照一定的規則校驗流中的元素,將符合條件的元素提取到新的流中的操作。
distinct,去除流中的重復元素;
sorted(),自然排序,流中元素需實現Comparable接口;
sorted(Comparator com),Comparator排序器自定義排序。
limit,可以設置流的最大長度,超出的部分將被拋棄;
skip,跳過流中的前n個元素,返回剩下的元素;
flatMap,接收一個函數作為參數,將流中的每個值都換成另一個流,然后把所有流連接成一個流;
map只能把一個對象轉換成另一個對象來作為流中的元素。 而flatMap可以把一個對象轉換成多個對象作為流中的元素。
forEach方法,通過 Lambda 表達式的方式遍歷集合中的元素;
forEach,對流中的元素進行遍歷操作,通過傳入的參數去指定對遍歷到的元素進行什么具體操作。
count,用來獲取當前流中元素的個數;
max&min,可以用來或者流中的最值。
collect,把當前流轉換成一個集合;
collect,把一個流收集起來,最終可以是收集成一個值也可以收集成一個新的集合;流不存儲數據,那么在流中的數據完成處理后,需要將流中的數據重新歸集到新的集合里。
reduce,把一個流縮減成一個值,能實現對集合求和、求乘積和求最值操作;
reduce,對流中的數據按照你指定的計算方式計算出一個結果。
文章來自
Java語言允許在類中再定義類,這種在其它類內部定義的類就叫內部類。
內部類又分為:常規內部類、局部內部類、匿名內部類和靜態嵌套類四種。
1、靜態內部類定義靜態內部類,定義在類中,任何方法外,用static定義;靜態內部類只能訪問外部類的靜態成員。
生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。
靜態內部類的對象可以直接生成 in=new ();而不需要通過生成外部類對象來生成。
這樣實際上使靜態內部類成為了一個頂級類。
可以定義私有靜態內部類。
2、java實現靜態內部類注意事項將某個內部類定義為靜態類,跟將其他類定義為靜態類的方法基本相同,引用規則也基本一致。
不過其細節方面仍然有很大的不同。
具體來說,主要有如下幾個地方要引起注意。
1)一般情況下,如果一個內部類不是被定義成靜態內部類,那么在定義成員變量或者成員方法的時候,是不能夠被定義成靜態成員變量與靜態成員方法的。
也就是說,在非靜態內部類中不可以聲明靜態成員2)一般非靜態外部類可以隨意訪問其外部類的成員變量以及方法(包括聲明為private的方法),但是如果一個內部類被聲明為static,則其在訪問包括自身的外部類會有諸多的限制。
靜態內部類不能訪問其外部類的非靜態成員變量和方法 3)在一個類中創建非靜態成員內部類的時候,有一個強制性的規定,即內部類的實例一定要綁定在外部類的實例中。
然后要在一個外部類中定義一個靜態的內部類,不需要利用關鍵字new來創建內部類的實例。
即在創建靜態類內部對象時,不需要其外部類的對象3、靜態內部類示例 java在實現LinkedList時使用了如下內部類: public class LinkedList
右邊是一種匿名內部類的寫法,
new Object(){}代表匿名內部類的一個子對象,{}內的代碼依據此處“Object”是否包含抽象方法分兩種情況:
1,若Object為接口或含有抽象方法(抽象類)、{}內必須包含該接口的方法實現代碼或者說重寫該抽象類的抽象方法(抽象類或接口無法實例化)
new Thread(new Runnable(){ //匿名
public void run(){
(runnable run);
如上面這段創建線程并start的代碼,new Thread括號內傳入的就是一個匿名內部類(匿名對象)。該匿名內部類實現了Runnable接口的run方法,因此可以創建對象并作為Thread構造函數的入參
2,若Object為普通類,{}內可以重寫也可以不重寫Object里面的方法。要注意的是,這個時候
new Object(){} 整體作為Object對象的一個匿名子類對象
另外,通常來說這種寫法,適用于你想重寫某個父類的某個方法(或實現某個接口的方法)并調用,但是又不想再創建一個class類來重寫(或實現)的時候。通過以下格式來定義:
new 父類名/接口名(){ 定義子類成員或者覆蓋父類方法 }.方法
只是比較淺顯的回答,具體樓主多翻翻書看看吧、
內部類相信大家都應該用過,但我也相信大家應該都只是很簡單的使用。
所以今天,就來詳細講解內部類的使用,廢話不多說,我們先趕緊來看吧。
在普通類中使用內部結構先來看個示例:
Teacher類里面有個內部類Student:
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Students=newStudent();//實例化內部類的對象();}//在Teacher類中的內部類classStudent{publicvoidprint(){();//msg是Teacher類里面的屬性}}}測試類:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}輸出結果:
我是一名老師Processfinishedwithexitcode0從整體的代碼結構來講,內部類的結構并不合理,所以內部類本身最大的缺陷在于破壞了程序的結構,但是破壞需要有目的的破壞,那么它也一定會有其優勢,如果要想更好的觀察出內部類的優勢,就可以將內部類拿到外面來。 我將上面的代碼Student拿出來。
Teacher類:
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}Student類:
publicclassStudent{privateTeacherteacher;publicStudent(Teacherteacher){=teacher;}publicvoidprint(){(());//msg是Teacher類里面的屬性}}測試:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}輸出結果:
我是一名老師Processfinishedwithexitcode0我們折騰了半天主要的目的就是為了讓Student這個內部類可以訪問Teacher這個類中的私有屬性,如果不用內部類的時候整體代碼會非常的麻煩,所以可以得出內部類的優點:輕松的訪問外部類中的私有屬性。
需要注意的是:內部類雖然可以方便的訪問外部類中的私有成員或私有方法,同理**,外部類也可以輕松訪問內部類中的私有成員或私有方法**。
示例如下:
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent();//實例化內部類的對象();();}classStudent{privateStringinfo=我是一名學生;publicvoidprint(){();}}}publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}輸出結果:
我是一名老師我是一名學生Processfinishedwithexitcode0使用了內部類之后,內部類與外部類之間的私有操作的訪問就不再需要通過setter,getter以及其他的間接方式完成了,可以直接進行操作,但是需要注意的是,內部類本身也屬于一個類,雖然在大部分情況下內部類往往是被外部類包裹的,但是外部依然可以產生內部類的實例化對象,而此時,內部類實例化對象的格式如下:
外部類.內部類內部類對象=new外部類()內部類();
在內部類編譯完成之后會自動形成一個Teacher$類文件,其中“$”這個符號換到程序中就變為“.”,所以內部類的全稱:“外部類.內部類”。 內部類與外部類之間可以直接進行私有成員的訪問,這樣一來內部類如果要是提供有實例化對象了,一定要先保證外部類實例化了。
publicclassTest{publicstaticvoidmain(String[]args){=newTeacher()();();}}如果此時Student類只允許Teacher類來使用,那么在這樣的情況下就可以使用private進行私有定義。
這樣,此時的Student類就無法再外部使用,即在test中的這條語句=newTeacher()()就失效。
在抽象類和接口中使用內部結構在我們的java之中,類作為最基礎的結構體實際上還有與之類似的抽象類或者是接口,抽象類和接口中都可以定義內部結構。
接口中定義內部接口我們現在定義內部接口:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}0publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}1測試:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}2輸出結果:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}3接口中定義內部抽象類下面我們繼續觀察一個內部抽象類,內部抽象類可以定義在普通類,抽象類,接口內部都可以。
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}4publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}5測試:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}6輸出結果:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}3用內部類實現外部接口內部類還有一些更為有意思的結構,即:如果現在定義了一個接口,那么可以在內部利用類實現該接口,在JDK1.8之后,接口中追加了static方法可以不受到實例化對象的控制,現在就可以利用此特性來完成功能。
接口內部進行接口實現:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}8測試:
publicclassTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();();}}9輸出結果:
我是一名老師Processfinishedwithexitcode00從上面可以看到,內部類是非常靈活的結構,只要你的語法滿足了,各種需求都可以幫你實現!
static定義內部類static定義內部類如果說現在內部類上使用了static定義,那么這個內部類就變成了外部類,static定義的都是獨立于類的結構,所以該類結構就相當于是一個獨立的程序類了。 需要注意,static定義的不管是類還是方法只能夠訪問static成員,所以static定義的內部類只能夠訪問外部內中的static屬性和方法。
我是一名老師Processfinishedwithexitcode01這個時候的Student類是一個獨立類,如果此時要想實例化Student類對象,只需要根據“外部類.內部類”的結構實例化對象即可
格式如下外部類.內部類內部類對象=new外部類.內部類();
測試:
我是一名老師Processfinishedwithexitcode02輸出結果:
我是一名老師Processfinishedwithexitcode0所以以后如果發現類名稱上提供有.,首先應該立刻想到這是一個內部類的結構,如果可以直接進行實例化,則應該立刻認識到這是一個static定義的內部類,但是static定義內部類的形式來講并不常用,static定義內部接口的形式最為常用。
static定義內部接口我是一名老師Processfinishedwithexitcode04我是一名老師Processfinishedwithexitcode05我是一名老師Processfinishedwithexitcode06測試:
我是一名老師Processfinishedwithexitcode07輸出結果:
我是一名老師Processfinishedwithexitcode08方法中定義內部類內部類可以在任意的結構中定義,這就包括了:類中、方法中、代碼塊中。 但在方法中定義內部類的情況比較多。
我是一名老師Processfinishedwithexitcode09publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}0輸出結果:
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}1此時在say方法內部提供有Student內部類的定義,并且發現內部類可以直接訪問外部類中的私有屬性也可以直接訪問方法中的參數,但對于方法中的參數直接訪問時從JDK1.8開始支持的。 而在JDK1.8之前**,如果方法中定義的內部類要想訪問方法中的參數則參數前必須追加final。 **
之所以取消這樣的限制是為了擴展函數式編程準備的。
匿名內部類匿名類是一種簡化的內部類的處理形式,其主要是在抽象類和接口的子類上使用的。
接口和抽象類是一樣的。
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}2publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}3publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}4如果說現在Study接口中的XiaoMing子類只使用唯一的一次,那么是否還有必要將其定義為單獨的類?那么在這樣的要求下就發現這個時候定義的子類是有些多余了,所以就可以利用內部類的形式來解決此問題。
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}2publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}6匿名內部類不一定要在抽象類或接口上,但只有在抽象類和接口上才有意義。 有些時候為了更加方便的體現出匿名內部類的使用,往往可以利用靜態方法做一個內部類的匿名內部類實現。
在接口中直接定義匿名內部類。
publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}7publicclassTeacher{privateStringmsg=我是一名老師;//只能在類內部訪問publicvoidsay(){Studentstudent=newStudent(this);//實例化內部類的對象();}publicStringgetMsg(){;}}8與內部類相比匿名內部類只是一個沒有名字的只能夠使用一次的,并且結構固定的一個子類。
總結:方法,類,抽象類,接口,代碼塊中都可以定義內部結構——類,抽象類,接口。
本文主要講了如何在內部類中使用內部類和接口中使用內部類以及如何使用static修飾的內部類和如何在方法中使用內部類。 看完這篇相信你對內部類的理解更加深入了。
作者:初念初戀
new 類名(){方法定義} 這種寫法是匿名內部類。
1、匿名內部類就是沒有名字的內部類。 這是Java為了方便程序員編寫程序,而設計的一個機制。 因為有時候有的內部類只需要創建一個它的對象就可以了,以后再不會用到這個類,這時候使用匿名內部類就比較合適,而且也免去了給它取名字的煩惱。 2、如果滿足下面的一些條件,使用匿名內部類是比較合適的: ·只用到類的一個實例。 ·類在定義后馬上用到。 ·類非常小(SUN推薦是在4行代碼以下) ·給類命名并不會導致你的代碼更容易被理解。 在使用匿名內部類時,要記住以下幾個原則: ·匿名內部類不能有構造方法。 ·匿名內部類不能定義任何靜態成員、方法和類。 ·匿名內部類不能是public,protected,private,static。 ·只能創建匿名內部類的一個實例。 ·一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類。 ·因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。 3、用匿名內部類創建多線程有兩種方式,和創建一個線程是一樣的。
第①種繼承Thread:
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://www.hudongshop.com/article/ef1297067e365766eb55.html,復制請保留版權鏈接!
引言位置信息在當今移動應用程序開發中扮演著至關重要的角色,位置管理器,LocationManager,提供了獲取設備位置的工具,但要構建穩健可靠的基于位置的應用程序,需要對高級技術有深入的了解,1.使用FusedLocationProviderFusedLocationProvider是Android中位置管理器的默認位置提供程序,它...。
本站公告 2024-09-30 09:21:38
在Delphi開發中,TreeView控件是一個功能強大的組件,用于創建樹形視圖,提供用戶友好的導航和數據組織,掌握TreeView控件的特性和用法,對于構建動態、易于使用的用戶界面至關重要,TreeView控件概述TreeView控件是一個Windows組件,它將數據組織成一個層次結構,顯示為可展開的節點和子節點,每個節點可以包含文...。
互聯網資訊 2024-09-27 23:08:46
摘要NoSQL,NotOnlySQL,數據庫技術在過去十年中迅速發展,成為現代應用程序開發中不可或缺的一部分,NoSQL數據庫提供了傳統SQL數據庫無法比擬的靈活性、可擴展性和性能,本文將深入探討不斷發展的NoSQL生態系統,并對未來發展方向進行展望,我們將重點關注四種主要的NoSQL數據庫類型,鍵值存儲、文檔數據庫、寬列存儲和圖形數...。
本站公告 2024-09-26 16:50:23
在Java中,受保護,protected,訪問修飾符是一種訪問級別,可以控制類的成員的可見性,受保護的成員可以在以下情況下訪問,在子類中,無論子類屬于哪個包,在同一包中的任何類中,即使它們不是子類,受保護與其他訪問修飾符的對比訪問修飾符可見性public可以在任何類中訪問,無論包或繼承關系如何,protected可以在子類或同一包中的...。
互聯網資訊 2024-09-25 16:31:47
前言用戶體驗,UX,在現代Web和移動應用程序中至關重要,用戶期望與應用程序進行無縫和高效的交互,簡化數據輸入是提升用戶體驗的一個關鍵方面,因為它可以減少用戶輸入錯誤并加快任務完成速度,input不可編輯功能的優勢HTML的input元素提供了一個`readonly`屬性,可用于禁用輸入字段并使其不可編輯,這在某些情況下非常有用,例如...。
互聯網資訊 2024-09-16 15:44:02
嵌入式內容和宿主頁面之間的通信對于提供無縫的用戶體驗至關重要,未來,跨域通信可能會得到改進,以支持更復雜和動態的交互,跨域通信改進方案有幾種潛在的改進方案可以提高跨域通信的效率和可靠性,CORS,跨域資源共享,CORS是一種瀏覽器機制,允許從不同域加載的腳本和資源之間進行通信,它通過在HTTP響應中包含特定的頭信息,如Access,...。
技術教程 2024-09-16 04:09:57
樣式,可以創建更具吸引力和響應性的交互式按鈕,2.顯示工具提示可以使用Hover事件在鼠標懸停時顯示有關元素的附加信息,3.展開菜單通過在父元素上綁定Hover事件,可以在鼠標懸停時展開下拉菜單,4.預覽圖像可以使用Hover事件在鼠標懸停時顯示圖像的放大版本或不同的圖像,5.改變光標通過使用cursor,方法,可以在鼠標懸停時改變...。
技術教程 2024-09-13 20:52:06
引言Java核心技術是當今最重要的編程語言之一,它被廣泛應用于各種領域,包括Web開發、移動開發和企業級應用程序,為了深入掌握Java編程,了解其核心技術至關重要,Java核心技術第十二版,Java核心技術第十二版,是該經典系列的最新版本,它提供了全面且深入的Java核心技術的指南,本書由KathySierra和BertBates撰寫...。
互聯網資訊 2024-09-12 16:57:13
留言版是網站和應用程序常見的互動功能,允許用戶留下評論、提問和分享想法,如果不采取適當的安全措施,留言版代碼可能會成為黑客攻擊的門戶,導致用戶數據被竊取或網站被入侵,留言版代碼的安全漏洞以下是留言版代碼中常見的安全漏洞,跨站腳本,XSS,攻擊,惡意代碼注入到留言中,并在其他用戶訪問該留言時執行,從而控制受害者的瀏覽器,SQL注入攻擊,...。
技術教程 2024-09-11 21:09:10
簡介排序是計算機科學中一個基本操作,涉及將一組元素按特定順序排列,C語言提供了一個名為sort的標準庫函數,可用于對各種數據類型,如整數、浮點數、字符串,的數組進行排序,sort函數背后的排序算法對代碼的效率和可靠性具有重大影響,排序算法的影響sort函數使用快速排序算法,這是一種在平均情況下具有O,nlogn,時間復雜度的快速、高效...。
最新資訊 2024-09-09 17:43:58
body,font,family,Arial,Helvetica,sans,serif,h1,font,size,2em,font,weight,bold,text,align,center,h2,font,size,1.5em,font,weight,bold,p,font,size,1em,text,align,justif...。
最新資訊 2024-09-08 21:05:40
一、APP官方網站下載很多國外軟件官方網站頁面,都提供了APP的下載鏈接,我們可以通過在iPhone瀏覽器中,打開APP所在的官方網站,找到相關下載鏈接后,再下載安裝APP即可,二、借助蘋果數據管理工具操作指引,步驟1,下載安裝好工具,使用數據線連接電腦與iPhone,選擇點擊首頁,應用,功能區的,立即管理,步驟2,進入工具的,應用...。
技術教程 2024-09-02 05:51:50