黑马程序员 枚举、注解

来源:互联网 发布:网络情歌大全在线播放 编辑:程序博客网 时间:2024/06/05 21:11
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

枚举和注解都是jdk1.5中的新特性,在java发展之时去掉了C++中的枚举属性,但是随着Java应用越来越广泛,为了适应各种需求,又重新加上了枚举这类属性。它能更加方便的操作一些特殊的类。注解也一样,是为了方便使用某些功能而诞生的。它们都是和类一样,可以独立创建和使用的。


枚举:

在我看来,Java中的枚举就是一个单例模式的扩展,单例模式是在类中创建一个对象,并对外提供公共的访问方式。而枚举的每一个属性就是一个自身的类,它省去了创建自己这个类型对象的语句。然后在枚举中添加了一些其特有的方法,但是这与普通类中方法差别并不大,都是对其中自己类对象的操作。所以,枚举不过是一种特殊的类而已,不需要花很多时间去掌握,当需要用到其中方法的时候可以去查阅API。


因为枚举是单例模式的增强版,所以其构造函数必须私有化。外界可以只用枚举类名来调用,且其中的每一个自身对象都实现了枚举中的所有方法。

下面是一个枚举的例子:

public enum TrafficLamp{//枚举的3个属性,red,green,yellow;都是它本类的对象RED(45){public TrafficLamp nextLamp() {return GREEN;}},GREEN(30){public TrafficLamp nextLamp(){return YELLOW;}},YELLOW(3){public TrafficLamp nextLamp() {return RED;}};//类中定义了一个抽象的方法,下一个灯,所以每一个对象都必须实现这个方法,这里用的是内部类方式public abstract TrafficLamp nextLamp();private int time;//私有化的构造函数,必须接收一个时间值private TrafficLamp(int time){this.time = time;}}
这里可以看到,枚举与普通的类区别并不大,和单例模式差不多,只不过有了多个自身的对象而已。但是,有了枚举后,我们在许多应运方面更加灵活了,不需要记住必须new哪几个对象,直接写在枚举中,只能调用其中有的对象。


注解 (Annotation):

jdk1.5提供的3个主要注解:

1. @SuppressWarmings:忽略警告(可以是各种类型的警告)

2. @Deprecated:声明已过时的方法

3. @Override:用于覆盖,测试是否为复写的方法


这个最常见的注解,也是最可能用到的注解。但是,注解也可以自己创建,并且写入自己的属性和方法,并且用于特定的地方。

需要注意的是:

注解也是有生命周期的,并且可以声明存在的位置

这里便涉及到两个元注解:

Retention:声明注解的周期(java源文件时检测,class文件时检测,runtime时检测)

Target:声明注解可以用的位置(如类上,方法上,属性上等等)


下面是一个自己写的注解例子:

//声明该注解可以在内存运行时检测,声明周期长@Retention(RetentionPolicy.RUNTIME)//声明该注解定义在类上@Target(ElementType.TYPE)//注解定义的格式,和类差不多,但是返回值变成了@interfacepublic @interface ItcastAnnotation {//注解的属性,在加注解时必须添上,如果加了缺省方式 default,则可不写,为默认值String color() default "blue" ;String value() default "false";int[] arr() default {1,3,5};}
这就是一个最简单的注解,当使用时,我们必须加上属性color,value,int[]。当然,这里写了缺省值,也可以不加。这些属性是为了写入不同的内容而存在的,比如SuppressWarmings("depracation")就是忽略过时的警告。


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击