`
leon.s.kennedy
  • 浏览: 106440 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics