java内部枚举类_内部类和枚举类

内部类:

内部类的定义 :

在一个类的内部又定义了一个类,里面的这个类就是内部类。

内部类可以定义在外部类的成员位置(与成员变量的位置相同)或局部位置(意思是,把类写在外部类的方法里面)。

什么时候使用内部类 :

一个具体的事物里面还有一个具体的事物。比如汽车中有发动机。

1、成员内部类

1.将内部类,定义在了外部类的成员位置。

2.成员内部类,可以使用成员修饰符:public、static等。但是一般也不写,因为开发也不怎么用。

3.成员内部类,毕竟是一个类,可以继承,也可以实现接口...

4.调用规则:

内部类可以使用外部类的成员,包括私有(因为内部类没有出去外部类的范围)。[例1]

外部类要使用内部类的成员,必须要创建内部类的对象。

packagecom;public classOuter {private int a = 1;class Inner{ //在外部类成员的位置定义内部类

public voidfun(){

System.out.println(a);//内部类可以使用外部类的成员。

}

}

}classtest1{public static voidmain(String[] args) {

Outer.Inner oi= new Outer().new Inner(); //创建内部类的对象的格式。

oi.fun();

}

}

结果:1

内部类中同名变量的调用:

packagecom;public classOuter {private int a = 1;class Inner{ //在外部类成员的位置定义内部类

private int a = 2;public voidfun(){int a = 3;

System.out.println(a);//内部类可以使用外部类的成员。取所在方法的值

}

}

}classtest1{public static voidmain(String[] args) {

Outer.Inner oi= new Outer().new Inner(); //创建内部类的对象的格式。

oi.fun();

}

}

结果:3

packagecom;public classOuter {private int a = 1;class Inner{ //在外部类成员的位置定义内部类

private int a = 2;public voidfun(){int a = 3;

System.out.println(this.a);//内部类可以使用外部类的成员。取所在类的值

}

}

}classtest1{public static voidmain(String[] args) {

Outer.Inner oi= new Outer().new Inner(); //创建内部类的对象的格式。

oi.fun();

}

}

结果:2

packagecom;public classOuter {private int a = 1;class Inner{ //在外部类成员的位置定义内部类

private int a = 2;public voidfun(){int a = 3;

System.out.println(Outer.this.a);//内部类可以使用外部类的成员。取所在类的外部类的值

}

}

}classtest1{public static voidmain(String[] args) {

Outer.Inner oi= new Outer().new Inner(); //创建内部类的对象的格式。

oi.fun();

}

}

结果:1

局部内部类:

定义在成员方法里面。

packagecom;public classOuter {public voidout(){class Inner{//类定义在方法里面。

public voidfun(){

System.out.println("aaa");

}

}

System.out.println("我是一个方法。");

Inner inner= new Inner();//在方法内部使用这个类。否则在main中没法使用这个类。

inner.fun();

}

}classtest1{public static voidmain(String[] args) {

Outer o= newOuter();

o.out();

}

}

结果:aaa

内部类的实际使用--匿名内部类 :

匿名内部类的格式:

new 接口或父类(){

重写抽象方法

};

3eee3153932d1f11a96fa77446a7392d.png

9836610a0bf65d41e90f31cbe6b8fa10.png

匿名内部类的使用举例:

d34dea28489c5e0240bbac78791bddd6.png

枚举类:

要点:

使用的是enum关键字而不是class。

多个枚举变量直接用逗号隔开。

枚举变量最好大写,多个单词之间使用”_”隔开(比如:INT_SUM)。

定义完所有的变量后,以分号结束,如果只有枚举变量,而没有自定义变量,分号可以省略(例如上面的代码就忽略了分号)。

在其他类中使用enum变量的时候,只需要【类名.变量名】就可以了,和使用静态变量一样。

最简单的使用:

packagecom;enumWeekday{

SUN,MON,TUS,WED,THU,FRI,SAT

}public classtest2 {public static voidmain(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

}

}

常用的方法和功能:

1、Weekday.valueOf() 方法:

它的作用是传来一个字符串,然后将它转变为对应的枚举变量。前提是你传的字符串和定义枚举变量的字符串一抹一样,区分大小写。如果你传了一个不存在的字符串,那么会抛出异常。

packagecom;enumWeekday{

SUN,MON,TUS,WED,THU,FRI,SAT

}public classtest2 {public static voidmain(String[] args) {

System.out.println(Weekday.valueOf("mon".toUpperCase()));

}

}

结果:MON

2、Weekday.values()方法:

这个方法会返回包括所有枚举变量的数组。在该例中,返回的就是包含了七个星期的Weekday[]。可以方便的用来做循环。

枚举变量的.ordinal()方法:

默认情况下,枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,类似于数组的下标。而.ordinal()方法就是获取这个次序(或者说下标)

packagecom;enumWeekday{

SUN,MON,TUS,WED,THU,FRI,SAT

}public classtest2 {public static voidmain(String[] args) {

System.out.println(Weekday.values());for(Weekday w:Weekday.values()){

System.out.println(w+ ".ordinal() ===>" +w.ordinal());

}

}

}

结果:

e830fd1df27dc933388782bd0e2a0474.png

3、枚举变量的toString()方法:

该方法直接返回枚举定义枚举变量的字符串,比如MON就返回【”MON”】。

5、枚举变量的compareTo()方法:

该方法用来比较两个枚举变量的”大小”,实际上比较的是两个枚举变量的次序,返回两个次序相减后的结果,如果为负数,就证明变量1”小于”变量2 (变量1.compareTo(变量2),返回【变量1.ordinal() - 变量2.ordinal()】)

6、枚举类的name()方法:

它和toString()方法的返回值一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值