• 注解


    注解

    解释

    • 注解不同于注释,注释是给开发者看的,便于更加方便的理解程序,注解是给JVM识别的。
    • 所有的Java类都是Object的子类
    • 所有的Annotation都是java.lang.annotation.Annotation的子类
    • Annotation通常作用于pagkage、Class、Field、Method上面
      JDK 提供的几个特俗的Annotation,称为元Annotation,只能用在Annotation上面。

    常用注解

    • @ Target (jdk提供)
      表示定义的注解作用在哪里
      * ElementType.TYPE:class、interface、Enum 类、接口、枚举
      * ElementType.Field:Field 字段
      * ElementType.Method:Method 方法
    • Retention
      表示注解的保留策略
      * RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
      * RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
      * RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

    示例:
    Column

    //注解放到字段上面
    @Target(ElementType.TYPE)
    //运行时保留,可以通过反射获取
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Column {
    
      public   String name() default "jack";
    
        public  String value();
    
        public String address() default  "";
    
    }
    
    User.java
    @Column(name = "zhangsan" ,value = "12",address = "北京市")
    public class User {
    
        public static  void Say(String name,String value,String address)
        {
            System.out.println("name:"+name+" --value:"+value+"--address:"+address);
        }
    
    }
    
    

    main

    
    public static  void  main(String [] args)
        {
            User user=new User();
            Class<? extends User> aClass = user.getClass();
            Column annotation = aClass.getAnnotation(Column.class);
            if(annotation!=null) {
                try {
                    String address = annotation.address();
                    String name = annotation.name();
                    String value = annotation.value();
    
                    Method say = aClass.getMethod("Say", String.class, String.class, String.class);
                    say.invoke(user,name,value,address);
    
                } catch (Exception ex) {
    
                    ex.printStackTrace();
                }
    
            }
    
    
    
    
        }
    
    
  • 相关阅读:
    【知识总结】Burnside 引理和 Polya 定理
    【洛谷1973】[NOI2011]NOI嘉年华(动态规划)
    【洛谷4705】玩游戏(多项式)
    【洛谷5366】[SNOI2017] 遗失的答案(状压DP)
    【Codeforces235D_CF235D】Graph Game(概率_基环树)
    【Codeforces553E_CF553E】Kyoya and Train(概率_CDQ分治_FFT)
    【知识总结】博弈论入门
    Saltstack
    Tomcat 的 catalina.out 日志分割
    eclipse的工程里的*.properties文件默认以unicode的编码形式显示
  • 原文地址:https://www.cnblogs.com/lilihai/p/10223628.html
Copyright © 2020-2023  润新知