zoukankan      html  css  js  c++  java
  • Java注解--笔记

    @Override标签的作用
    @Override是伪代码,所以是可写可不写的.它表示方法重写,写上会给我们带来好处.
    1.可以当注释用,方便阅读.
    2.告诉阅读你代码的人,这是方法的复写.
    3.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.

    Java注解又称为标注,是Java从1.5开始支持加入源码的特殊语法元数据;

    Java中的类、方法、变量、参数、包都可以被注解。

    注解仅仅是元数据,和业务逻辑无关,所以当你查看注解类时,发现里面没有任何逻辑处理;

    如果注解不包含业务逻辑处理,必然有人来实现这些逻辑。注解的逻辑实现是元数据的用户来处理的,

    注解仅仅提供它定义的属性(类/方法/变量/参数/包)的信息,注解的用户来读取这些信息并实现必要的逻辑

    当使用java中的注解时(比如@Override、@Deprecated、@SuppressWarnings)JVM就是用户,它在字节码层面工作。

    注解的作用
    格式检查:告诉编译器信息,比如被@Override标记的方法如果不是父类的某个方法,IDE会报错;

    减少配置:运行时动态处理,得到注解信息,实现代替配置文件的功能;

    减少重复工作:比如第三方框架xUtils,通过注解@ViewInject减少对findViewById的调用,类似的还有(JUnit、ActiveAndroid等);

    如何自定义注解

    使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。

    在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。

    方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。

    可以通过default来声明参数的默认值。

    • 自定义注解格式:

        元注解
        public @interface 注解名{
            定义体;
        }
      
    • 注解参数可支持的数据类型:

    1、所有基本数据类型(int,float,boolean,byte,double,char,long,short);

    2、String类型;

    3、Class类型;

    4、enum类型;

    5、Annotation类型;

    6、以上所有类型的数组。

    • 实例演示:

    ToDo.java:注解类

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @interface Todo {
        public enum Priority {LOW, MEDIUM, HIGH}
        public enum Status {STARTED, NOT_STARTED}    
        String author() default "Yash";
        Priority priority() default Priority.LOW;
        Status status() default Status.NOT_STARTED;
    }
    

    BusinessLogic:使用注解的类

    public class BusinessLogic {
        public BusinessLogic() {
            super();
        }
        
        public void compltedMethod() {
            System.out.println("This method is complete");
        }    
        
        @Todo(priority = Todo.Priority.HIGH)
        public void notYetStartedMethod() {
            // No Code Written yet
        }
        
        @Todo(priority = Todo.Priority.MEDIUM, author = "Uday", status = Todo.Status.STARTED)
        public void incompleteMethod1() {
            //Some business logic is written
            //But its not complete yet
        }
    
        @Todo(priority = Todo.Priority.LOW, status = Todo.Status.STARTED )
        public void incompleteMethod2() {
            //Some business logic is written
            //But its not complete yet
        }
    }
    

    TodoReport.java:解析注解信息

    public class TodoReport {
        public TodoReport() {
            super();
        }
    
        public static void main(String[] args) {
            getTodoReportForBusinessLogic();
        }
    
        /**
         * 解析使用注解的类,获取通过注解设置的属性
         */
        private static void getTodoReportForBusinessLogic() {
            Class businessLogicClass = BusinessLogic.class;
            for(Method method : businessLogicClass.getMethods()) {
                Todo todoAnnotation = (Todo)method.getAnnotation(Todo.class);
                if(todoAnnotation != null) {
                    System.out.println(" Method Name : " + method.getName());
                    System.out.println(" Author : " + todoAnnotation.author());
                    System.out.println(" Priority : " + todoAnnotation.priority());
                    System.out.println(" Status : " + todoAnnotation.status());
                    System.out.println(" --------------------------- ");
                }
            }
        }
    }
    

     

  • 相关阅读:
    NPS平台,WCF学习
    QQ机器人Java版
    C#Linq To Entry
    C# AD域操作
    中国象棋软件制作感想
    WPF DataGrid 绑定BitmapSource
    DNN Tips
    Tools tips
    TRANSACTSQL Tips
    【阶段试题分析】阶段一试题总结
  • 原文地址:https://www.cnblogs.com/chuanheng/p/Annotation.html
Copyright © 2011-2022 走看看