`

Java之注解

    博客分类:
  • Java
阅读更多
注解:也指元数据,在代码中添加信息提供的一种形式化方法
Java SE5内置了三种标准注解:
@Override,@Deprecated,@SuppressWarnings.
四种元注解:
@Target,@Retention,@Documented,@Inherited.
@Target表示可用于什么地方,ElementType包含有:
类、接口(包括注释类型)或枚举声明:ElementType.TYPE
字段声明(包括枚举常量)ElementType FIELD
方法声明 ElementType.METHOD
参数声明 ElementType.PARAMETER
构造方法声明 ElementType.CONSTRUCTOR
局部变量声明 ElementType.LOCAL_VARIABLE
注释类型声明 ElementType.ANNOTATION_TYPE
包声明 ElementType.PACKAGE
@Retention表示注释的生命周期,RetentionPolicy取值有:
SOURCE 编译器要丢弃的注释
CLASS     编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释
RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,可以反射性地读取

一 定义注解

Useraction注解类

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})

public @interface Useraction {
	
	String userName() default "david";
	Hobbys getHobbs() default Hobbys.程序;
	String [] getUserAddress() default {"成都高升"};
	String sex();
	//如注释类只有一个属性:userName,那么就要指明属性:
        //LovePer lovePer() default @LovePer(userName="Emma");
        //注释类默认属性为:value,可不加属性值,直接输入值就行了
	LovePer lovePer() default @LovePer("Emma");
	@SuppressWarnings("rawtypes")
	Class commanyName();	
}


相关类:

public enum Hobbys {	
	音乐,
	电影,
	小说,
	程序,
	游泳
}

public @interface LovePer {	
	//String userName();
	String value();
}

public class Commanys {
	
	public Commanys() {
	
	}

	private String name = "志向信息技术开发公司";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}	

}

public class CommanysTwo {	
	private String name = "志大信息技术开发公司";
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public CommanysTwo() {		

	}
}


UseractionTest注解类的测试

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

@Useraction(commanyName=Commanys.class,userName="陈国强",getHobbs=Hobbys.电影,getUserAddress="重庆大平",sex="男",lovePer=@LovePer("李中"))
public class UseractionTest {	
	
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception{	
		if(UseractionTest.class.isAnnotationPresent(Useraction.class)){			
			Useraction annotaction = (Useraction)UseractionTest.class.getAnnotation(Useraction.class);
			System.out.print("姓名:"+annotaction.userName());
			System.out.print(",爱好:"+annotaction.getHobbs());
			System.out.print(",地址:"+annotaction.getUserAddress()[0]);
			System.out.print(",性别:"+annotaction.sex());
			System.out.print(",爱人名字:"+annotaction.lovePer().value());
			Class clazz = annotaction.commanyName();
			Object obj = clazz.newInstance();			
			java.lang.reflect.Field field = obj.getClass().getDeclaredField("name");
			field.setAccessible(true);
			System.out.println(",公司名字:"+field.get(obj));		
		}
		helloAnnotion();			
	}
	
	@Useraction(commanyName=CommanysTwo.class,userName="陈国轼",getHobbs=Hobbys.小说,getUserAddress="成都双楠",sex="男",lovePer=@LovePer("李静"))
	public static void helloAnnotion() throws SecurityException, NoSuchMethodException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException{
		
		Method helloMethod = UseractionTest.class.getMethod("helloAnnotion");
		Useraction annotaction = (Useraction)helloMethod.getAnnotation(Useraction.class);
		if(null != annotaction){
			System.out.print("姓名:"+annotaction.userName());
			System.out.print(",爱好:"+annotaction.getHobbs());
			System.out.print(",地址:"+annotaction.getUserAddress()[0]);
			System.out.print(",性别:"+annotaction.sex());
			System.out.print(",爱人名字:"+annotaction.lovePer().value());
			@SuppressWarnings("rawtypes")
			Class clazz = annotaction.commanyName();
			Object obj = clazz.newInstance();			
			Method method = obj.getClass().getDeclaredMethod("getName");
			method.setAccessible(true);
			System.out.print(",公司名字:"+method.invoke(obj));
		}		
	}
}


程序控制台输出:
姓名:陈国强,爱好:电影,地址:重庆大平,性别:男,爱人名字:李中,
公司名字:志向信息技术开发公司
姓名:陈国轼,爱好:小说,地址:成都双楠,性别:男,爱人名字:李静,
公司名字:志大信息技术开发公司

分享到:
评论
2 楼 liuzidong 2011-08-23  
只是一个入门吧,希望对你有帮助呀!我也是才学的呀
1 楼 pandengzhegt 2011-08-23  
哥们,讲完啊,看着挺感兴趣的怎么到半道儿没了-。-霎是郁闷噻

相关推荐

    java注解代码java注解代码

    java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解...

    java 自定义注解验证

    首先,我们需要理解Java注解的基本原理。注解是一种元数据,它提供了一种安全的方法来将信息附加到代码中,而不直接影响代码的执行。Java提供了内置的注解,如`@Override`、`@Deprecated`等,但自定义注解允许我们...

    java的注释规范(单行注释、多行注释、分块注释)

    java 注释规范详解 java 注释规范是 Java 开发过程中不可或缺的一部分,它的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。java 注释规范可以分为三种:单行注释...

    Java自定义注解使用反射获取字段注解

    自定义注解的强大之处在于可以通过注解处理器生成额外的代码或者在运行时进行动态处理。例如,我们可以编写一个注解处理器来生成getter和setter方法,或者在运行时根据注解动态改变对象的行为。 总结一下,Java的...

    Java自定义注解实例

    ### 一、Java注解概述 1. **定义**: 注解是一种声明式的编程元素,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、变量等不同级别。 2. **预定义注解**: Java标准库提供了若干预定义注解,如`...

    Java代码注释率检查器.rar

    Java代码注释是编程实践中非常重要的一个环节,它有助于提高代码的可读性和维护性。注释能够解释代码的功能、用途以及实现逻辑,使得其他开发者能更快地理解代码,尤其在团队协作中更是不可或缺。本资源"Java代码...

    java代码注释模板

    1. 单行注释:以`//`开头,常用于临时性的或者快速的注解,例如: ```java // 这是一个示例单行注释,用于解释下面的代码功能 ``` 2. 多行注释:以`/*`开始,`*/`结束,可以跨越多行,适合较长的描述: ```java /* ...

    清除Java代码注释

    总的来说,清除Java代码注释可以通过多种方式实现,包括使用IDE如MyEclipse的内置功能,编写自定义的注解处理器,或是利用第三方工具。每种方法都有其适用场景,开发者可以根据自身需求和技能水平选择最合适的途径。...

    Java的注释

    ### Java的注释 在Java开发中,良好的注释习惯对于提高代码的可读性和可维护性至关重要。本文将详细介绍几种常见的Java注释方式及其用途,并通过实例展示如何设置Eclipse IDE中的注释模板,帮助开发者更好地管理和...

    java自定义注解实现由类自动生成表

    在Java编程中,自定义注解(Annotation)是一种强大的元数据机制,允许程序员在源代码中插入信息,这些信息可以被编译器、IDE或运行时环境用来进行各种处理。自定义注解使得代码更加可读,易于维护,并且可以自动化...

    Java 使用注解拼接SQL语句

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或运行时环境用来执行特定的任务。"Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得...

    Eclipse Java 注释模板

    Eclipse作为一款强大的Java集成开发环境(IDE),提供了许多便捷的功能,其中之一就是“Eclipse Java 注释模板”。通过配置和使用这些模板,程序员可以快速地为代码添加注释,提高代码的可读性和维护性。下面我们将...

    Java注释规范

    Java 注释规范 Java 注释规范是为了让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。该规范定义了 Java 项目中注释的规范和要求,包括注释的类型、注释的内容、注释的位置...

    java通用注解API

    本文将深入探讨Java注解的API及其使用。 1. **注解的基本概念** - 注解(Annotation)是Java SE 5.0引入的新特性,它是一种用于向编译器或JVM提供元数据的方式。 - 注解通过`@`符号后跟注解类型的名称来应用,如`...

    Eclipse Java注释模板.txt

    ### Eclipse Java注释模板知识点详解 #### 一、概述 在进行Java开发的过程中,良好的代码注释习惯不仅能帮助自己快速回顾代码逻辑,还能方便其他开发者理解代码意图,从而提高整个团队的工作效率。Eclipse作为一款...

    Java注解.pdf

    Java注解是一种特殊的注释,它们以`@注释名`的形式出现在代码中,用于向编译器或运行时环境传递额外的信息。注解不会改变程序的行为,但它们可以被编译器、IDE或其他工具用来生成文档、执行编译时检查或进行其他形式...

    java自定义注解接口限流demo

    java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo...

    Java中给自己写的方法增加注释

    在Java编程中,注释是不可或缺的一部分,它不仅有助于提高代码的可读性,也有利于团队协作和后期的维护。本篇文章将详细讲解如何在Java中给自己写的方法添加注释,以便于日后查阅和理解。 首先,我们了解Java中的三...

Global site tag (gtag.js) - Google Analytics