代码改变世界

黑马程序员-张老师基础加强1-枚举

2014-06-06 18:30  黑马程序员*  阅读(264)  评论(0)    收藏  举报

基本知识点:

1.静态导入,如import static java.lang.Math.一般的导入:导入一个类或者一个包中的所有类。

静态导入:导入的是一个类中的某个静态方法或者全部的静态方法。

2.overloadoverride的区别:

3.自动装箱和自动拆箱。

自动装箱:Integer num =3;(将基本数据类型变成包装类)

自动拆箱:Integer num=3;num+3;(本来只有基本数据类型才可以参与运算)

4.享元模式:对象很小,用的次数非常多,内部有共同的属性。变将其封装作为共享物件,以减少内存的使用率。对象很小,有很多的相同属性(内部状态),而且用的次数很多。所以就可以封装一个对象,不同的东西变成外部的属性,作为方法的参数传入。如将-128-127的数据,放在线程池中作为共享,不用每次都另开辟内存空间。

例如:我们在输入”dffdddd”的时候,”d”要重复,变将”d”封装成对象。“d”在字符序列中的位置是不一样的(显示的时候),但是他们共享的是一个对象。

5.枚举

为什么要有枚举?在定义星期几或性别变量时,怎么定义?这时就用枚举。

枚举:定义一组常量,变量的取值只能再该常量列表中。

好处;可以在编译时期控制源程序中填写的非法信息。普通变量则无法实现。

模拟枚举类:该类是抽象的。构造方法必须私有防止被外部创建对象。

abstract class enmuDemo{

public static final enmuDemo RED= new enmuDemo(){       

public enmuDemo nextDay() {           

           return RED;

        }};

    private enmuDemo(){}    

    public abstract enmuDemo nextDay();      

}  

可以看出:枚举的成员是一个对象,并用内部;类实现。

主函数调用:System.out.println(Traffic.Red);

public enum TrafficLamp{

    RED(1),GREEN,YELLO,BLUE;   

    TrafficLamp(){

        System.out.println("Constructor....run");

    }

    TrafficLamp(int x){

        System.out.println(x);

    }   }

运行结果: 1

Constructor....run

Constructor....run

Constructor....run

YELLO

总结:在调用枚举的常量时,所有的常量的对象都被创建了,即使没有调用。枚举似单例,需要先实例化一次,方便以后调用。

单个成员的枚举就是单例。

应用1:常量 以逗号分隔。最后一个分号可以省略。但是后面有方法时,必须加。常量的类型都是:public static final

Putblic enum TrafficLamp{

    Red,Green,yello;

}

利用反射获取枚举类型的修饰符:

int mod =TrafficLamp.class.getField("RED").getModifiers();

    String modtype = Modifier.toString(mod);

    System.out.println(modtype);

    运行结果:public static final

应用2:switch可以使用byte shot int char enum

 public enum TrafficLamp{

RED,GREEN,YELLO

}}

public static void show(){  

    //枚举是一种特殊的类,其中的每个元素都是该类的一个对象,可以

    TrafficLamp lamp = TrafficLamp.RED;

    switch(lamp){

    case RED:

        System.out.println("green");

        break;

    case GREEN:         

        System.out.println("green");

        break;

    case YELLO:

        System.out.println("green");

        break;

    }

}

应用3:带有构造方法和抽象方法的枚举类

public enum TrafficLamp{

    RED(1){

        public TrafficLamp nextLamp(){

           return GREEN;

        }

    } ,GREEN {       

        public TrafficLamp nextLamp() {          

           return RED;

        }

    };

    TrafficLamp(){} //空参构造

    TrafficLamp(int x){} //有参构造

    public abstract TrafficLamp nextLamp();//抽象方法    

}}

总结:需要覆盖抽象方法。直接在成员的后面加{}即可。 

枚举的写法:RED和RED()是一样的效果。都是默认调用空参构造方法。

public enum TrafficLamp{

    RED,GREEN();

    public void nextLamp(){    

    }   }

枚举总结:

1.枚举相当于一个类,可以定义成员变量,构造方法,普通方法。其中,枚举的列表元素必须放在最前面。

2.枚举的构造方法必须是私有的

3.RED和RED()是一样的效果。都是默认调用空参构造方法

4.枚举中只有一个成员时,可以作为单例模式。