注解和枚举回顾
java基础补缺--注解类型和枚举类型
1.注解类型回顾
Annotation,注解(也称为元数据),可以为我们在代码中添加额外的信息,我们也可以很方便的使用这些数据。
当然,在代码中添加额外信息我们最经常使用的是注释(comment),好的注释对于理解代码或逻辑是非常重要的,comment通俗易懂,并且使用一些工具,注释也可以生成专门的文档,但是注解相比注释,拥有更加强大的,不可替代的功能。它可以提供编译期的一些操作,比如类型检查,生成新的文件(包括java文件等)。
java 5在java.lang 包中内置了三种标准注解
- @Override: 表示当前方法其实是覆盖父类的方法,如果有拼写错误等,编译器(和IDE)就可以发出错误提示。
- @Deprecated:表示该类或方法不建议使用了,未来有可能被废弃或者被移除,如果程序员使用了该类或方法,那么编译器(和IDE)将会发出警告信息。 这里也就就是warning而已,你也可以继续使用,不过建议还是不要使用被Deprecated的API,说不定未来哪个版本就被移除了。
- @SuppressWarnings:给编译器一条指令,告诉它对范围内的某些类型的警告保持静默。这样编译时就不再输出该警告了
自定义注解
@Target : 表示该注解可以用在什么地方(使用范围),可能的ElementType参数包括:
- CONSTRUCTOR:构造器的声明。
- FIELD:域声明(包含enum的实例)。
- LOCAL_VARIABLE : 局部变量声明。
- METHOD : 方法声明。
- PACKAGE: 包声明。
- PARAMETER: 参数声明。
- TYPE: 类,接口(包括注解类型)或 enum类型。
@Rentation:表示需要在什么级别保存注解信息(注解的生命周期),可选的RetentionPolicy参数包括:
- SOURCE:源码级别,注解将被编译器丢弃。
- CLASS: 在编译器生成的class文件中可用,但是会被VM丢弃。(默认的就是该级别)。
- RUNTIME: 运行期保留该注解,所以此时可以通过反射机制来读取注解的信息。
@Documented:将注解包含在javadoc中。
@Inherited:允许子类继承父类的注解
创建注解代码示例:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {
public String name() default "";
}
利用反射使用注解:
public static void iteratorAnnotations(Method method) {
// 判断 somebody() 方法是否包含MyAnnotation注解
if(method.isAnnotationPresent(MyAnnotation.class)){
// 获取该方法的MyAnnotation注解实例
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
// 获取 myAnnotation的值,并打印出来
String[] values = myAnnotation.value();
for (String str:values)
System.out.printf(str+", ");
System.out.println();
}
通过getAnnotation()方法可以获取注解对象,并获取注解内容
2.枚举类型回顾
为什么要使用枚举?
枚举类型其实是整型,它的作用一是让数值看起来更直观二是圈定一个范围,是数值被限定在这个范围中。
如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。
使用枚举类型需要注意的事
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。 且枚举类型的构造方法必须为私有方法。
枚举类的原理是将枚举类继承java.lang.Enum<enumTest.MyDay>,并且声明为final,其内部维护多个实例,而且是在静态代码块中进行实例化多个实例。其实普通的类构造方法声明为private,静态代码块中初始化对应的变量即可实现enum的原理代码,枚举对象不可再继承其他类
枚举简单用法示例: