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