package cd.itcast.day2;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 注解
*
* 注解的使用构成: 1,注解的申明 2,在类型(代码)上面打上注解 3,第三方的程序在使用打了注解的类型
*
* 作业:自己设计一套文档标签,如果我在一个类上面加了这些标签,我把这个类作为参数传给一个方法,就能为这个类的注释生成一个API文档文件
*
* @author Administrator
*
*/
public class AnnotationDemo {
/**
* 使用Annotation(使用反射来得到标签实例) <A extends Annotation> A getAnnotation(Class<A>
* annotationClass):得到指定类型的注解实例 Annotation[] getAnnotations():得到该类型上面的所有注释实例
* Annotation[] getDeclaredAnnotations() :返回直接存在于此元素上的所有注释。 boolean
* isAnnotation() : 该类型是否是一个标签类型(Class) boolean isAnnotationPresent(Class<?
* extends Annotation> annotationClass) :判断该类型上面是否有指定的标签类型
*
* @param args
*/
public static void main(String[] args) throws Exception {
Class<User> c = User.class;
// 说明:annotation也是一种类型
// Class a=MyAnn.class;
if (c.isAnnotationPresent(MyAnn.class)) {
System.out.println("hello");
MyAnn ann = c.getAnnotation(MyAnn.class);
System.out.println(ann.name());
System.out.println(Arrays.toString(ann.names()));
System.out.println(ann.resetDay());
OtherAnn other = ann.other();
System.out.println("other " + other.value());
} else {
System.out.println("fck");
}
Method m = c.getDeclaredMethod("getName");
if (m.isAnnotationPresent(MyAnn.class)) {
System.out.println("方法上面有标签");
}
}
/**
* @SuppressWanings:去掉警告,(去掉警告的类型写在后面括号里面) 标签有自己定义的能放置的位置
*/
@SuppressWarnings(value = "deprecation")
public void dateTest() {
Date d = new Date();
System.out.println(d.toLocaleString());
AnnotationDemo dd = new AnnotationDemo();
dd.someThing();
}
/**
* 标签里面可以有值, 1,一个常量值 2,一个数组
*
* @Deprecated:方法过时
*/
@SuppressWarnings({ "rawtypes", "unused" })
@Deprecated
public void someThing() {
List a = new ArrayList();
}
/**
* 注释一个标签。这个标签没有参数值
*
* @Override:代表当前方法是覆盖一个父类的方法
*/
@Override()
public String toString() {
return super.toString();
}
}
package cd.itcast.day2;
import java.lang.annotation.ElementType;
/**
* 自定义一个注释
* @author Administrator
*
* @Retention:规定定义的这个标签保留到什么时候
* @Target:规定定义的这个标签能加载哪些位置
* ANNOTATION_TYPE:标签上面
* Constructor:构造器上面
* Field:字段
* Local variable:局部变量
* METHOD:方法/方法的返回类型
* PACKAGE:包
* Parmater:方法参数
* TYPE:类/接口/枚举
*/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnn {
/**
* 在标签里面加参数 类型 属性名称() [default 类型的值]
* 注意:如果在标签里面仅有value这个属性要填,在使用的时候就可以忽略不写
*/
String name() default "itcast";
String[] names() default {};
String value();
WeekDays resetDay();
OtherAnn other();
}
package cd.itcast.day2;
public @interface OtherAnn {
String value();
}
分享到:
相关推荐
Java基础复习笔记12Java自定义注解Annotation的使用
JAVA注解(Annotation).doc JAVA注解(Annotation).doc
java注解annotation
Java注解Annotation用起来很方便,也越来越流行,由于其简单、简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性。 这篇文章将利用注解,来做...
Java 注解(Annotation) - 请认准 ih0qtq
java元注解
JPA、EJB、Spring零配置等等怎么使用相信各位读者都能掌握,这里主要是说如何自定义自己的注解,自己使用自定义的注解。
主要介绍了java 注解annotation的使用以及反射如何获取注解的相关资料,需要的朋友可以参考下
Java Annotation注解技术
计算机后端-Java-Java核心基础-第23章 枚举类与注解 11. Annotation的使用示例.avi
java-reflection-annotation-test 探索java反射和注解之美
java-注解Java注解入门教程
GraphQL-Java批注 是一个很棒的库,但是它的语法有点冗长。 该库为GraphQL模式定义提供了基于注释的语法。 如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 ...
学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503
annotation 注解 annotation的资料 JAVA注解 个人整理很有实用价值
1. sqlite-annotation-convention帮助生成sql语句的注解插件; 2. sqlite-java-tool pc端(包括windows,linux,mac)下的sqlite数据库操作工具,该工具是基于sqlite-annotation-convention插件的,实现了许多常用...
本文全面讲述了Java注解Annotation与Java自定义注解及相关内容,大家可以认真看看
新手学Java注解的最好资料,15分钟迅速开发
本文针对java初学者或者annotation初次使用者全面地说明了annotation的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation...