`

java之注解及自定义注解例程

 
阅读更多
package annotation1;

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 annotation2;

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 annotation3;

public @interface OtherAnn {
	String value();
}


分享到:
评论

相关推荐

    Java 教材中的例程.zip

    《Java教材中的例程》是一份集合了Java编程语言各个章节典型示例的压缩包,包含从基础到高级的不同主题。这些章节按照学习路径的逻辑顺序进行排列,旨在帮助初学者逐步掌握Java编程的核心概念和技术。以下是每个章节...

    java自学基础源码合集

    学习如何创建和使用自定义注解,以及如何通过反射机制处理注解,可以增强代码的可维护性。 12. **Java集合框架的高级主题**:包括Lambda表达式、Stream API、Optional类等,这些都是Java 8及以后版本引入的新特性,...

    ibatis初学者学习例程,一看就懂!

    除了XML映射文件,Ibatis还支持使用Java注解来定义Mapper接口。这样可以避免XML文件的繁琐,提高代码可读性。 7. **事务管理** Ibatis支持手动和自动两种事务管理方式。在配置文件中可以指定事务管理器类型,如...

    Thinking In Java 4th英文版

    《Thinking in Java》是编程领域中极具影响力的著作之一,由Bruce Eckel编写,本书第4版为读者提供了深入理解Java语言的基础知识及高级概念。Bruce Eckel不仅是MindView公司的总裁,还是一位在软件开发领域享有盛誉...

    Java经典编程200例.rar

    12. **枚举与注解**:Java中的枚举类型和注解的使用场景。 13. **泛型**:泛型的引入,以及泛型类、泛型方法、通配符的应用。 14. **设计模式**:可能会涉及到一些常见的设计模式,如单例、工厂、观察者等。 15. ...

    雍俊海java程序设计教程(第2版)

    3. **异常处理**:Java中的异常处理机制,如try-catch-finally语句块,以及自定义异常,帮助开发者处理程序运行时可能出现的问题。 4. **数组与集合框架**:数组是存储同类型数据的基本结构,而集合框架如ArrayList...

    SSH例程+MySql数据库

    Hibernate通过XML配置文件或注解将Java对象映射到数据库表,简化了数据库操作。在这个例子中,Hibernate可能被用来处理相册、论坛和用户的数据存储。 **MySQL** 是一个广泛使用的开源关系型数据库管理系统,以其高...

    mxnet 中文学习笔记,代码标注,删除了python以外的接口和不感兴趣的例程。.zip

    它支持多种编程语言,包括Python、R、Java、Scala、Julia等,但在这个特定的学习笔记中,只保留了Python接口相关的知识。这份笔记可能包含了作者在学习MXNet过程中对核心概念、API的注解以及对不感兴趣或非核心示例...

    S-mall-ssm:小小商城系统,JavaWEB项目,基于SSM,仿天猫页面,功能齐全,实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等

    通过合理配置 MyBatis Generator 和自定义插件,灵活隔离手写代码和自动生成代码。实现了 BaseService 类对 Service 层进行抽象。通过拦截器实现了方法级粒度的鉴权,通过AOP实现了参数校验。 演示: 可自行注册账号...

    struts2 拦截器实例

    现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截器基础 1. **拦截器的概念**:拦截器是基于Java的动态代理机制实现的,它在Action调用前后进行处理,形成一个拦截链。每个拦截器都可以...

    谭浩强C语言word版

    在Word版的教材中,读者可以方便地进行阅读、注解和搜索,提高了学习的效率。 C语言是一种强大的编程语言,它是许多现代编程语言的基础,包括Java、Python和C++等。掌握C语言能帮助我们深入理解计算机底层工作原理...

    Struts2入门教程(全新完整版)

    二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7.Action中的method属性 12 8.使用ForwardAction...

    OAuth2-auth-resource-server

    2. **资源控制器** - 这些控制器保护了需要授权才能访问的API端点,通常会使用`@PreAuthorize`或`@Secured`注解来指定访问策略。 3. **JWT令牌解析器** - 项目可能会包含一个自定义的JWT解析器,用于验证和提取JWT...

Global site tag (gtag.js) - Google Analytics