内部类的定义 :数组
在一个类的内部又定义了一个类,里面的这个类就是内部类。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()方法的返回值同样。