随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

java注解(上)

JDK1.5新特性:注解


相当于一种标记,加上注解就等同加上了某种标记,以后javac编译器、开发工具和其他程序可以用反射来了解这个类及各种元素上有无何种标记。有什么标记、就去干相应的事


标记可以加在:包、类、字段、方法、方法的参数以及局部变量上



java.lang包,可看到JDK中提供的最基本的Annotation


@Override
表示当前方法是覆盖父类的方法。


@Deprecated
表示当前元素是不赞成使用的(过时的)


@SuppressWarnings
表示关闭一些不当的编译器警告信息



注解也相当于一个特殊的类



注解的应用结构图:



注解类
应用了“注解类”的类   对“应用了注解的类”进行反射操作的类


@interface A{
@A
class C{


}
class
B{ ...}
B.class.isAnnotationPresent(A.class);


A
a = B.class.getAnnotation(A.class);



}



元注解:为注解提供服务的注解称为~


@Retention(RetentionPolicy.RUNTIME)


它的作用:使注解一直保留到一个时期,决定注解的生命周期,默认是CLASS


RetentionPolicy是一个枚举,其中有三种取值:




取值
分别对应



RetentionPolicy.SOURCE --> java源文件


RetentionPolicy.CLASS --> class文件


RetentionPolicy.RUNTIME --> 内存中的字节码



当编译器编译java源文件时,可能会把“没用的”注解从中去掉,编译成class


当使用该类时,类加载器把class文件加载到内存中时,也会把“没用的”注解从中去掉,生成内存中的字节码



-------------------------------------------


@Retention(RetentionPolicy.RUNTIME)
//指定注解生命周期
@Target({ElementType.METHOD,ElementType.TYPE})
//指定注解作用的范围
public @interface MyAnnotation {


}


-------------------------------------------


java自带的3个注解:


@Override --> SOURCE


@SupperessWarning -->SOURCE


@Deprecated --> RUNTIME




@Target(ElementType.METHOD) 注解:


指定注解的作用范围,如方法前,等


-------------------------------------------


@MyAnnotation
public class AnnotationTest {



@SuppressWarnings("deprecation")
public static void
main(String[] args) {
// TODO Auto-generated method
stub
System.runFinalizersOnExit(true);
//过时方法
sayHello();//过时方法
if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
//哪个注解在不在
MyAnnotation annotation =
AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(annotation);
}


}

@Deprecated
public
static void sayHello(){
System.out.println("你好");
}


-------------------------------------------


JDK1.5中,Interface Type接口


Class也实现了该接口,Type更准确,包含:Class interface enum


 



posted on 2012-04-22 15:57 hantai 阅读(168) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: