java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)
生活随笔
收集整理的這篇文章主要介紹了
java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
final關(guān)鍵字:
final表示最終的不可變的,在java中可以用來修飾類或方法、局部變量、成員變量。
// 1.final關(guān)鍵字修飾類需要放在class關(guān)鍵字前面,表示不可變的類,需要注意,這里表示當(dāng)前類不能有子類,但是有父類,即使沒有明確說明父類,也有個最頂級父類object,任何類都一個默認(rèn)的父類object,其格式:修飾符 final class 類名稱{}: // 2.當(dāng)final關(guān)鍵字修飾方法時,此方法將是最終方法,也就是說此方法不能不被覆蓋重寫,其格式:修飾符 final 返回值類型 方法名(參數(shù)){}; // 3.final關(guān)鍵字修飾局部變量時,那么這個變量將不能被改變。 // 4.當(dāng)final關(guān)鍵字修飾成員變量時,必須手動賦值默認(rèn)值。 public final class FinalKeyClass{//被final關(guān)鍵字修飾的類不能被繼承,否則會報(bào)錯}權(quán)限修飾符:
java中有四種修飾符,從大到小依次為:public > protected > (default) > private;
同一個類中被這四種修飾符修飾過的變量都可以訪問到;
同一個包中,被private修飾的變量,在另一個類中不能訪問,被其他修飾符修飾的可以訪問到;
繼承了另一個包中的父類的類中,只有被public和protected修飾的變量可以被訪問到。其他修飾的不能被訪問;
不同包下沒有任何關(guān)系的類中定義一個變量,只有被public修飾后,在另一個類中是可以被訪問到的,其他修飾符修飾后不能被訪問;
內(nèi)部類:
概念:將類A定義在類B中,類A就稱為內(nèi)部類,B則稱為外部類;內(nèi)部類可以隨意訪問外部類中的成員,但是外部類訪問內(nèi)部類中的成員時需要借助內(nèi)部對象。
分類:成員內(nèi)部類、局部內(nèi)部類(包含匿名內(nèi)部類)
// 外部類InClass: public class InClass{// 6-1.同名變量訪問之-外部類成員變量定義:String str = "外部類成員變量";// 1.成員內(nèi)部類定義格式:在某個類中定義一個和外部類類似的類:修飾符 class 類名稱{},如:在InClass類中定義一個成員內(nèi)部類:AnyClass,此時InClass則為外部類:public class AnyClass{// 6-2.同名變量訪問之-內(nèi)部類成員變量定義:String str = "內(nèi)部類成員變量";String str2 = "內(nèi)部類成員變量2";public void methodAny(){System.out.println("內(nèi)部類的方法執(zhí)行了");// 2.內(nèi)部類中訪問外部類中的成員(變量):System.out.println(say + "my name is kuhai");// 6-3.同名變量訪問之-內(nèi)部類局部變量定義:String str = "內(nèi)部類中局部變量";// 7.訪問同名變量:System.out.println(str);//內(nèi)部類中局部變量System.out.println(this.str);//內(nèi)部類成員變量System.out.println(InClass.this.str);//外部類成員變量System.out.println(str2);//內(nèi)部類成員變量2};};// 定義一個外部類的成員變量:private String say = "hello,";// 定義一個外部類的方法:public void methodIn(){System.out.println("外部類的方法執(zhí)行了");// 3.內(nèi)部類的使用:分間接使用和直接使用:// 間接使用內(nèi)部類:在外部類的方法中創(chuàng)建一個內(nèi)部類的對象,并調(diào)用內(nèi)部類中的方法,在外部類的對象中使用外部類的這個方法即可:AnyClass anyObj = new AnyClass();anyObj.methodAny();// new AnyClass().methodAny();這里可以使用匿名對象代替上面兩行代碼,利用匿名對象的一次性,可以結(jié)合方法,每調(diào)用一次方法就會創(chuàng)建一次匿名對象// 8.定義局部內(nèi)部類格式:在外部類方法中定義類,如:class AnyInClass{//注意:局部內(nèi)部類無權(quán)限修飾符修飾;外部類只能使用public、default;成員內(nèi)部類四種權(quán)限修飾符都可以使用;int num = 5;/*num = 7;java8+開始,局部內(nèi)部類中訪問某個變量時,這個變量應(yīng)該是保持不變的,實(shí)際上是用final關(guān)鍵字修飾的,但是這里可以省略,只要保證值不變即可。局部變量是在方法中,而方法是在棧內(nèi)存中,因此局部變量也是在棧內(nèi)存中,當(dāng)方法運(yùn)行結(jié)束后就會出棧,局部變量也跟著消失;new出來的東西會在堆內(nèi)存中,堆內(nèi)存中的東西要等垃圾回收后才消失,這里new出來的對象用到局部變量時,會復(fù)制局部變量及值,即使方法出棧局部變量消失,這里的對象依舊可以使用復(fù)制的值運(yùn)行,但是這個值不能改變*/public void anyinmethod(){System.out.println("局部內(nèi)部類變量:"+num);//局部內(nèi)部類變量:5};};// 9.局部內(nèi)部類中只能自己訪問自己的局部變量或在當(dāng)前方法中再創(chuàng)建一個局部內(nèi)部類的對象來使用,如:AnyInClass anyinobj = new AnyInClass();anyinobj.anyinmethod();System.out.println(anyinobj.num);//5/*總結(jié):內(nèi)部類訪問變量的規(guī)則:先在當(dāng)前作用域查找是否有變量,有的話就訪問,沒有的話則向上繼續(xù)查找,沒有則報(bào)錯;· 局部變量訪問規(guī)則:局部變量只能在它的方法內(nèi)使用,超出方法就不能使用了;局部內(nèi)部類訪問規(guī)則:在局部內(nèi)部類中訪問或在局部內(nèi)部類所在方法中創(chuàng)建局部內(nèi)部類的對象訪問;· 訪問內(nèi)部類的同名變量格式:this.變量名;· 訪問外部類的同名變量格式:外部類名.this.變量名;· */}; } // 定義Myinterface接口: public interface Myinterface{public abstract void methodinterface(); }; // 定義創(chuàng)建一個外部類對象的類: public class InClassObj{public static void main(String[] args){// 4.創(chuàng)建外部類的對象并調(diào)用外部類中的方法間接的使用內(nèi)部類的成員:InClass inClassObj = new InClass();inClassObj.methodIn();//當(dāng)執(zhí)行此文件后可以看到執(zhí)行的結(jié)果:// 外部類的方法執(zhí)行了// 內(nèi)部類的方法執(zhí)行了// hello,my name is kuhai// 內(nèi)部類中局部變量// 內(nèi)部類成員變量// 外部類成員變量// 內(nèi)部類成員變量2,說明間接使用內(nèi)部類成功了// 5.直接使用內(nèi)部類:直接使用內(nèi)部類中的成員是有固定格式的,其格式為:外部類名稱.內(nèi)部類名稱 對象名 = new 外部類名稱().new 內(nèi)部類名稱();如:InClass.AnyClass inClassObj2 =new InClass().new AnyClass();inClassObj2.methodAny();//運(yùn)行結(jié)果如下:// 內(nèi)部類的方法執(zhí)行了// hello,my name is kuhai// 內(nèi)部類中局部變量// 內(nèi)部類成員變量 // 外部類成員變量 // 內(nèi)部類成員變量2,說明直接使用內(nèi)部類成功了// 10.匿名內(nèi)部類定義格式:接口名稱 對象名 = new 接口名稱(){注意:需要覆蓋重寫接口中所有抽象方法},這一句大括號中的內(nèi)容被稱為匿名內(nèi)部類;直接new接口會報(bào)錯,但是給接口定義實(shí)現(xiàn)類又顯得麻煩,可以使用匿名內(nèi)部類代替接口實(shí)現(xiàn)類,常用于只創(chuàng)建一次對象的情況,如:Myinterface obj = new Myinterface(){@Overridepublic void methodinterface(){System.out.println("匿名內(nèi)部類中覆蓋重寫接口中的方法執(zhí)行了");//匿名內(nèi)部類中覆蓋重寫接口中的方法執(zhí)行了};};// 11.使用匿名內(nèi)部類:obj.methodinterface();//當(dāng)然這里可以省略對象名直接在大括號面通過.訪問,如:new Myinterface(){}.methodinterface()}; };提示:本文圖片等素材來源于網(wǎng)絡(luò),若有侵權(quán),請發(fā)郵件至郵箱:810665436@qq.com聯(lián)系筆者刪除。
筆者:苦海
總結(jié)
以上是生活随笔為你收集整理的java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql id 不在集合里面_MySQ
- 下一篇: python做一个考试系统_Python