java-初识注解Annotation

Posted weekstart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-初识注解Annotation相关的知识,希望对你有一定的参考价值。

直接通过代码简单了解一下:

 

  1 package com.etc;
  2 
  3 import java.lang.annotation.ElementType;
  4 import java.lang.annotation.Retention;
  5 import java.lang.annotation.RetentionPolicy;
  6 import java.lang.annotation.Target;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 /*
 11  * 注解不是程序本身,而是对程序作出解释,可以被其他程序读取
 12  * 注解信息可以用来处理流程
 13  * 格式为:@注释名,可以添加参数值
 14  * 如@SuppressWarningss(value="unchecked").
 15  * 可以附加在package,class,method,field等等上面,相当于给他们提供了额外的辅助信息,
 16  * 可以通过反射机制编程实现对这些元数据的访问
 17  */
 18 public class AnnotationDemo1 extends Object{
 19 
 20     public static void main(String[] args) {
 21 
 22         AnnotationDemo1 a=new AnnotationDemo1();
 23         System.out.println(a.toString());
 24         a.test();
 25         a.test2();
 26         a.test3();
 27 
 28     }
 29     
 30     @Override   /*表示该方法为重写父类Object下的toString方法,为内置注解*/
 31     public String  toString() {
 32         return "简单测试";
 33     }
 34 
 35     @Deprecated /*表示不建议程序员使用的方法,为内置注解*/
 36     public void test() {
 37         System.out.println("注解入门!");
 38     }
 39 
 40 
 41     /*
 42      * deprecation :使用了过时的类或过时的方法的警告
 43      * unchecked  :执行了未检查的转换时的警告,如使用泛型时未指定类型
 44      * fallthrough:使用switch语句时发生了case穿透
 45      * path:在类路径,原文件路径等中有不存在路径的警告
 46      * serial:挡在序列化的类上缺少serialVersionUID的警告
 47      * finally:任何finally子句不能完成的警告
 48      * all:关于以上所有情况的警告
 49      * 为内置注解
 50      */
 51     @SuppressWarnings("all")
 52     /*等同于@SuppressWarnings(value="all"),存在多个则改为@SuppressWarnings(value={"unchecked","deprecation"})*/
 53     public void test2() {
 54         List list=new ArrayList();
 55         List list2=new ArrayList();
 56         list.add(1);
 57         list2.add(1);
 58         System.out.println("内置注解测试:"+list.size());
 59     }
 60 
 61     /*
 62      * 自定义注解:    使用@interface自定义注解时-> 自动继承了java.lang.annotation.Annotation接口
 63      * 格式:public @interface 注解名{定义体}
 64      * 其中的每一个方法实际上就是声明了一个配置参数。
 65      * (1)方法的名称就是参数的名称
 66      * (2)返回值就是参数的类型 :返回类型只能是基本类型:Class,String,enum
 67      * (3)可以通过default来声明参数的默认值
 68      * (4)如果只有一个参数成员,一般参数名为value
 69      *  ps:注解元素必须要有值,经常使用空字符串,0作为默认值,也经常使用负数->-1表示不存在的意义
 70      */
 71 
 72     /*元注解:
 73      * 作用:负责注解其他注解,java定义了4个标准的meta-annotation类型,它们被用来提供对其他annotation类型作说明
 74      * 
 75      * @Target:描述注解的使用范围   ->取值方式: @Target(value=ElementType.参数值)
 76      * (1)package包->PACKAGE
 77      * (2)类,接口,枚举,Annotation类型->TYPE
 78      * (3)类型成员(方法,构造方法,成员变量,枚举值)->{构造方法:"CONSTRUCTOR",方法:"METHOD",描述域:"FIELD"}
 79      * (4)方法参数和本地变量->{局部变量:"LOCAL_VARIABLE",描述参数:"PARAMETER"}
 80      * 
 81      * @Retention:表示需要在什么级别保存该注释信息,用于描述注释的生命周期  ->取值方式:@Retention(value=RetentionPolicy.参数值)
 82      * (1)在源文件中有效,源文件保留->SOURCE
 83      * (2)在class文件中有效,class保留->CLASS
 84      * (3)在运行时有效,运行时保留,可以被反射机制读取->RUNTIME
 85      * @Document
 86      * @Inherited
 87      */
 88 
 89     //表示该注解只能用于方法前面
 90     @Target(value=ElementType.METHOD)
 91     //或者直接@Target(ElementType.METHOD)
 92     public @interface start{    
 93     }
 94 
 95     //表示该注释的生命周期只存在于源文件中
 96     @Retention(value=RetentionPolicy.SOURCE)
 97     public @interface over{
 98 
 99     }
100 
101     //表示该注解只能用于方法,类,接口,枚举,Annotation类型前面,生命周期只存在于源文件中
102     @Target(value={ElementType.METHOD,ElementType.TYPE})
103     @Retention(value=RetentionPolicy.SOURCE)
104     public @interface up{
105         //如果不加默认值,需要在加该注释的地方加上默认值
106         String name() ;
107         int id();
108         int age() default 18;
109     }
110 
111     @up(name = "", id = 0)
112     public void test3() {
113         System.out.println("自定义注解简单使用!");
114     }
115 }

 

效果截图:

技术图片

ps:文章待完善中,如存在问题欢迎大佬指点。

 

以上是关于java-初识注解Annotation的主要内容,如果未能解决你的问题,请参考以下文章

java细说 JAVA中 标注 注解(annotation)

JAVA注解Annotation

java EE中的hello1.java及Annotation(注解)

Java自定义注解Annotation的使用

JAVA - Annotation 注解 入门

Java 注解 (Annotation)