內部類和枚舉類

內部類:

內部類的定義 :數組

  在一個類的內部又定義了一個類,裏面的這個類就是內部類。this

  內部類能夠定義在外部類的成員位置(與成員變量的位置相同)或局部位置(意思是,把類寫在外部類的方法裏面)。spa

何時使用內部類 :code

   一個具體的事物裏面還有一個具體的事物。好比汽車中有發動機。對象

一、成員內部類

1.將內部類,定義在了外部類的成員位置。blog

2.成員內部類,可使用成員修飾符:public、static等。可是通常也不寫,由於開發也不怎麼用。繼承

3.成員內部類,畢竟是一個類,能夠繼承,也能夠實現接口...接口

4.調用規則:開發

          內部類可使用外部類的成員,包括私有(由於內部類沒有出去外部類的範圍)。[例1]字符串

          外部類要使用內部類的成員,必需要建立內部類的對象。

package com; public class Outer { private int a = 1; class Inner{  //在外部類成員的位置定義內部類
        public void fun(){ System.out.println(a);//內部類可使用外部類的成員。
 } } } class test1{ public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner();    //建立內部類的對象的格式。
 oi.fun(); } }

結果:1

內部類中同名變量的調用:

package com; public class Outer { private int a = 1; class Inner{  //在外部類成員的位置定義內部類
        private int a = 2; public void fun(){ int a = 3; System.out.println(a);//內部類可使用外部類的成員。取所在方法的值
 } } } class test1{ public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner();    //建立內部類的對象的格式。
 oi.fun(); } }

結果:3

 

package com; public class Outer { private int a = 1; class Inner{  //在外部類成員的位置定義內部類
        private int a = 2; public void fun(){ int a = 3; System.out.println(this.a);//內部類可使用外部類的成員。取所在類的值
 } } } class test1{ public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner();    //建立內部類的對象的格式。
 oi.fun(); } }

結果:2

 

package com; public class Outer { private int a = 1; class Inner{  //在外部類成員的位置定義內部類
        private int a = 2; public void fun(){ int a = 3; System.out.println(Outer.this.a);//內部類可使用外部類的成員。取所在類的外部類的值
 } } } class test1{ public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner();    //建立內部類的對象的格式。
 oi.fun(); } }

結果:1

 

局部內部類:

定義在成員方法裏面。

package com; public class Outer { public void out(){ class Inner{//類定義在方法裏面。
            public void fun(){ System.out.println("aaa"); } } System.out.println("我是一個方法。"); Inner inner = new Inner();//在方法內部使用這個類。不然在main中無法使用這個類。
 inner.fun(); } } class test1{ public static void main(String[] args) { Outer o = new Outer(); o.out(); } }

結果:aaa

 

內部類的實際使用--匿名內部類 :

匿名內部類的格式:

      new 接口或父類(){

              重寫抽象方法

      };

匿名內部類的使用舉例:

 

枚舉類:

要點:

    • 使用的是enum關鍵字而不是class。
    • 多個枚舉變量直接用逗號隔開。
    • 枚舉變量最好大寫,多個單詞之間使用」_」隔開(好比:INT_SUM)。
    • 定義完全部的變量後,以分號結束,若是隻有枚舉變量,而沒有自定義變量,分號能夠省略(例如上面的代碼就忽略了分號)。
    • 在其餘類中使用enum變量的時候,只須要【類名.變量名】就能夠了,和使用靜態變量同樣。

最簡單的使用:

package com; enum Weekday{ SUN,MON,TUS,WED,THU,FRI,SAT } public class test2 { public static void main(String[] args) { System.out.println(Weekday.valueOf("mon".toUpperCase()));//MON
        for (Weekday w:Weekday.values()){ System.out.println(w + ".ordinal() ===>" +w.ordinal()); } // SUN.ordinal() ===>0 // MON.ordinal() ===>1 // TUS.ordinal() ===>2 // WED.ordinal() ===>3 // THU.ordinal() ===>4 // FRI.ordinal() ===>5 // SAT.ordinal() ===>6
 } }

經常使用的方法和功能:

一、Weekday.valueOf() 方法:

  它的做用是傳來一個字符串,而後將它轉變爲對應的枚舉變量。前提是你傳的字符串和定義枚舉變量的字符串一抹同樣,區分大小寫。若是你傳了一個不存在的字符串,那麼會拋出異常。

package com; enum Weekday{ SUN,MON,TUS,WED,THU,FRI,SAT } public class test2 { public static void main(String[] args) { System.out.println(Weekday.valueOf("mon".toUpperCase())); } }

結果:MON

 

二、Weekday.values()方法:

  這個方法會返回包括全部枚舉變量的數組。在該例中,返回的就是包含了七個星期的Weekday[]。能夠方便的用來作循環。

 

 枚舉變量的.ordinal()方法:

 

  默認狀況下,枚舉類會給全部的枚舉變量一個默認的次序,該次序從0開始,相似於數組的下標。而.ordinal()方法就是獲取這個次序(或者說下標)

 

 

 

package com; enum Weekday{ SUN,MON,TUS,WED,THU,FRI,SAT } public class test2 { public static void main(String[] args) { System.out.println(Weekday.values()); for (Weekday w:Weekday.values()){ System.out.println(w + ".ordinal() ===>" +w.ordinal()); } } }

結果:

 

三、枚舉變量的toString()方法:

  該方法直接返回枚舉定義枚舉變量的字符串,好比MON就返回【」MON」】。

 

 

五、枚舉變量的compareTo()方法:

  該方法用來比較兩個枚舉變量的」大小」,實際上比較的是兩個枚舉變量的次序,返回兩個次序相減後的結果,若是爲負數,就證實變量1」小於」變量2 (變量1.compareTo(變量2),返回【變量1.ordinal() - 變量2.ordinal()】)

 

六、枚舉類的name()方法:

  它和toString()方法的返回值同樣。

相關文章
相關標籤/搜索