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