內部類和枚舉類

內部類:

內部類的定義 :數組

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

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

何時使用內部類 :3d

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

一、成員內部類

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

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

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()方法的返回值同樣。

相關文章
相關標籤/搜索