Java 注解编程

来源:互联网 发布:淘宝 评价 期限 编辑:程序博客网 时间:2024/05/16 04:27

 注解

                 注解相当于是一种标记,加了注解就等于打上了某种标记。注解可以加在包、类、字段、方法、方法的参数、局部变量上。开发工具和其它程序可以用反射来了解你的类及各种元素上有无何种标记,有什么标记就去干相应的事。

 

         (1)Java 中的注解

 

           @SuppressWarning 忽略警告     

public class AnotationTest {@SuppressWarnings("deprecation")public static void main(String[] args) {System.runFinalizersOnExit(true);}}

 

                  @Deprecated 表示某个元素已经过时

public class AnotationTest {@SuppressWarnings("deprecation")public static void main(String[] args) {System.runFinalizersOnExit(true);sayHello();}@Deprecatedpublic static void sayHello(){System.out.println("DriverKing_斌");}}



                     @override 重写父类中的一个方法

public class AnotationTest {@SuppressWarnings("deprecation")public static void main(String[] args) {System.runFinalizersOnExit(true);sayHello();}@Deprecatedpublic static void sayHello(){System.out.println("DriverKing_斌");}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubreturn super.equals(obj);}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn super.hashCode();}}


 

           (2)注解的自定义与反射调用

 

            注解的应用结构图:

 

           

 

           编写自定义注解:

@Retention(RetentionPolicy.RUNTIME) //元注解,这个参数表示该注解的生命周期保持到运行时public @interface MyAnotation {}


 

                应用注解:

@MyAnotation//添加了自定义注解public class AnotationTest {public static void main(String[] args) {if(AnotationTest.class.isAnnotationPresent(MyAnotation.class)){//判断是否为注解类型MyAnotation anotation = AnotationTest.class.getAnnotation(MyAnotation.class);System.out.println(anotation);}}}


 

                注解的生命周期:注解的生命周期有三个种: java源文件 -----> class文件 ----->内存中字节码 

 

               元注解:

         @Retention ,表示该注解的生命周期。默认值为在 class 文件阶段。

         @Target,表示该注解能被应用的范围。

@Retention(RetentionPolicy.RUNTIME) //元注解,这个属性表示该注解的生命周期保持到运行时@Target({ElementType.METHOD,ElementType.TYPE})//元注解,这个属性表示该注解应用在方法或各种类型身上,如果有多个属性,则用数组表示public @interface MyAnotation {}


 

              为注解添加属性:

 

        

@MyAnotation(Color="red",value="abc",array={1,2,3},annotation=@MetaAnnotation("调用注解的注解"))//如果有属性且没有默认值,则必须指定属性值public class AnotationTest {public static void main(String[] args) {if(AnotationTest.class.isAnnotationPresent(MyAnotation.class)){MyAnotation anotation = AnotationTest.class.getAnnotation(MyAnotation.class);System.out.println(anotation.Color());}}}


@Retention(RetentionPolicy.RUNTIME) //元注解,这个参数表示该注解的生命周期保持到运行时@Target({ElementType.METHOD,ElementType.TYPE})//元注解,这个参数表示该注解应用在方法或各种类型身上,如果有多个参数,则用数组表示public @interface MyAnotation {String Color();//定义了一个属性,表示这个注解有一个颜色属性String value();//特殊的属性,如果只有一个 vlaue 属性,则在调用注解的时候可以直接写属性值,例如 @Retention("abc")String name() default "DriverKing_斌";//指定默认值int[] array() default {2,1};MetaAnnotation annotation() default @MetaAnnotation("注解的注解");}


public @interface MetaAnnotation {String value();}



       

 

原创粉丝点击