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();
        }
    }
    
}

 

posted @ 2018-07-27 09:29  木&子  阅读(465)  评论(0编辑  收藏  举报