zoukankan      html  css  js  c++  java
  • java注解注意点

    注意:以后工作中代码中 不允许出现警告

    自定义注解

    1:自定义注解并没有发挥它的作用,而Eclipse自带的注解通过反射另外有一套代码,可以发挥它的作用,例如:跟踪代码。。。。。。

    2:如果自定义的代码中有属性,

            a,default  有默认值   则在使用注解时,可以不用赋值

             b:没有默认值,属性名为value,使用注解时可以直接赋值

             c:没有默认值,属性名不为value,使用注解时必须属性名=值。

            d:如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值,则无需使用{}

    package classTwo03;
    
    public @interface Override {
    
        int a();
    }
    package classTwo03;
    
    public class Student {
    
        
        public String name="xioaming";
        
        @Override(a=4)
        public boolean equals(Object obj) {
            return super.equals(obj);
        }
        
    }
    
    @FunctionalInterface
    interface Mammal{
        
        void run() ;
    }

    内置注解

    @Override只能用于方法上,不能用于属性,类,非重写方法,注解重写的方法

    @Deprecated 注解过时的方法

    @ SupperssWarnings("参数")  参数为unused  代表为这个变量没有用到  。

                  参数为deprecation:代表使用已被@Deprecated标注的程序元素

                  参数为serial  :代表在可序列化的类上缺少serialVersionUID定义

     1 package Depracated;
     2 
     3 import java.io.Serializable;
     4 
     5 @SuppressWarnings("serial")
     6 public class Test implements Serializable{
     7 
     8     public static void main(String[] args) {
     9         
    10         @SuppressWarnings("unused")
    11         String name;
    12         
    13         move(new Bike());
    14         move(new Car());
    15     }
    16     
    17     @Deprecated
    18     public static void move(Bike bike) {
    19         System.out.println("用自行车");
    20     }
    21     
    22     public static void move(Car car) {
    23         System.out.println("用汽车");
    24     }
    25 }
    26 
    27 class Bike{
    28     
    29 }
    30 
    31 class Car {
    32     
    33 }

    元注解

    1:Target({参数,参数......})参数可以为 ElementType.FIELD  代表这个被修饰的注解只能注解全局变量

                      ElementType.METHOD 代表这个被修饰的注解只能注解方法

                      ElementType.PACKAGE代表这个被修饰的注解只能注解包

                      ElementType.PARAMETER代表这个被修饰的注解只能注解参数

                      ElementType.TYPE代表这个被修饰的注解只能注解类,接口,枚举

    2:Retention(参数)参数可以为RetentionPolicy.SOURCE代表这个被修饰的注解,所修饰的东西在源码结束后就没有这个注解了

                   RetentionPolicy.CLASS代表这个被修饰的注解,所修饰的东西在字节码结束后就没有这个注解了

                   RetentionPolicy. RUNNING代表这个被修饰的注解,所修饰的东西在运行结束后就没有这个注解了

                   默认是字节码阶段

    3:@Documented 代表这个被修饰的注解可以在生成的文档中显示出来

            Eclipse中文档如何显示:1):首先在src上右键——选择Export——选择java下的javadoc——

                        选择出javadoc.exe(在bin目录下)——yes就可以了

                        这个时候已经生成了文档,我们在java工程中看到

                       2):如何找到java工程的所在文件呢

                          java工程右键——porperties——location后面的那个小图标——就看到啦doc——

                          点击doc——我们看到有一个index.html——点击在网页页面就看到了我们的程序文档

                      在这个文档中就可以看到注解是否显示了出来

    4:@Inherited 代表这个被修饰的注解可以被子类同样继承

    package Practice;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    public @interface RequestMapping {
    
    }
    package Practice;
    
    public class Student extends Father {
    
    }
    
    @RequestMapping
    class Father{
        
    }

    注解工作原理

    反射和注解综合

    package Practice;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequestMapping {
    
    }
    package Practice;
    
    public class Student {
    
        @RequestMapping
        @Deprecated
        public void run(int i) {
            
        }
        public void run() {
            
        }
        public void eat() {
            
        }
    }
    package Practice;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Test {
        
        @SuppressWarnings("rawtypes")
        public static void main(String[] args) {
            Class clazz = Student.class;
            try {
                Method [] mothods = clazz.getDeclaredMethods();
                for (Method method : mothods) {
                    Annotation [] anns=method.getAnnotations();
                    for (Annotation ann : anns) {
                        System.out.println(ann);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    SpringBoot_web开发-【实验】-员工列表-公共页抽取
    下载 Linux 内核的脚本
    uboot 修改代码 增加 环境变量
    Linux FHS
    Redis源码分析(二十五)--- zmalloc内存分配实现
    Redis源码分析(二十四)--- tool工具类(2)
    Redis源码分析(二十四)--- tool工具类(2)
    数据结构(二)——排序
    数据结构(一)——树
    python(三)——while语句
  • 原文地址:https://www.cnblogs.com/lyxcode/p/9375685.html
Copyright © 2011-2022 走看看