內部類的定義 :數組
在一個類的內部又定義了一個類,裏面的這個類就是內部類。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 接口或父類(){
重寫抽象方法
};
要點:
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()方法的返回值同樣。