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)