zoukankan      html  css  js  c++  java
  • 注解

    注解

    解释

    • 注解不同于注释,注释是给开发者看的,便于更加方便的理解程序,注解是给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();
                }
    
            }
    
    
    
    
        }
    
    
  • 相关阅读:
    Python在函数中使用*和**接收元组和列表
    nvidia-smi实时刷新并高亮显示状态
    linux docker
    linux Vue+nginx+django 实现前后端分离
    linux mysql 主从复制
    linux redis
    linux mysql主从复制
    linux python虚拟环境 相关的
    linux dns
    2 linux vim sudo 文件权限
  • 原文地址:https://www.cnblogs.com/lilihai/p/10223628.html
Copyright © 2011-2022 走看看