java实例是什么意思_java什么是实例意思指的是

本文详细介绍了Java注解的定义和应用。通过创建不同类型的注解(类注解、构造方法注解、方法注解和字段注解),并在实际类中进行使用,展示了如何在类、构造方法、方法和字段上添加注解,以及如何通过反射访问和打印这些注解的信息。通过这个实例,读者可以深入理解Java注解的工作原理和使用方式。
摘要由CSDN通过智能技术生成

1. 首先看下定义的注解类:

类注解定义, MyClassAnnotation.java:

[java] view plain copy

package com.ross.annotation;

import java.lang.annotation.*;

/**

* Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com

* Date: 2012-1-29

* Since: MyJavaExpert v1.0

* Description: class annotation

*/

@Retention (RetentionPolicy.RUNTIME)

@Target (ElementType.TYPE)

public @interface MyClassAnnotation

{

String uri();

String desc();

}

默认构造方法注解定义,MyConstructorAnnotation.java:

[java] view plain copy

package com.ross.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com

* Date: 2012-1-29

* Since: MyJavaExpert v1.0

* Description: Constructor annotation

*/

@Retention (RetentionPolicy.RUNTIME)

@Target (ElementType.CONSTRUCTOR)

public @interface MyConstructorAnnotation

{

String uri();

String desc();

}

方法注解定义,MyMethodAnnotation.java:

[java] view plain copy

package com.ross.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com

* Date: 2012-1-29

* Since: MyJavaExpert v1.0

* Description: method annotation

*/

@Retention (RetentionPolicy.RUNTIME)

@Target (ElementType.METHOD)

public @interface MyMethodAnnotation

{

String uri();

String desc();

}

字段注解定义, MyFieldAnnotation.java:

[java] view plain copy

package com.ross.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com

* Date: 2012-1-29

* Since: MyJavaExpert v1.0

* Description: field annotation

*/

@Retention (RetentionPolicy.RUNTIME)

@Target (ElementType.FIELD)

public @interface MyFieldAnnotation

{

String uri();

String desc();

}

2. 再看下我们注解的应用和测试:

在类上面使用了MyClassAnnotation注解, 默认构造方法上使用了MyConstructorAnnotation注解, 自定义方法上使用了MyMethodAnnotation注解, 自定义字段上使用了MyFieldAnnotation注解, 在Mail函数中则实现了访问这些注解,并打印注解信息.

MySample.java:

[java] view plain copy

package com.ross.annotation;

import java.lang.reflect.*;

/**

* Author: Jiangtao He; Email: ross.jiangtao.he@gmail.com

* Date: 2012-1-29

* Since: MyJavaExpert v1.0

* Description: This class is used to show how to use the annotation of each level

*/

@MyClassAnnotation (uri = "com.ross.MySample" , desc = "The class name" )

public class MySample

{

@MyFieldAnnotation (uri = "com.ross.MySample#id" , desc = "The class field" )

public String id;

/**

* Description: default constructor

*/

@MyConstructorAnnotation (uri = "com.ross.MySample#MySample" , desc = "The default constuctor" )

public MySample()

{

}

/**

* Description: normal method

*/

@MyMethodAnnotation (uri = "com.ross.MySample#setId" , desc = "The class method" )

public void setId(String id)

{

this .id = id;

}

/**

* Description: MyAnnotation test

* @throws NoSuchMethodException

* @throws SecurityException

* @throws NoSuchFieldException

*/

public static void main(String[] args) throws SecurityException,

NoSuchMethodException, NoSuchFieldException

{

MySample oMySample = new MySample();

// get class annotation

MyClassAnnotation oMyAnnotation = MySample.class

.getAnnotation(MyClassAnnotation.class );

System.out.println("Class's uri: " + oMyAnnotation.uri() + "; desc: "

+ oMyAnnotation.desc());

// get constructor annotation

Constructor oConstructor = oMySample.getClass().getConstructor();

MyConstructorAnnotation oMyConstructorAnnotation = (MyConstructorAnnotation) oConstructor

.getAnnotation(MyConstructorAnnotation.class );

System.out.println("Constructor's uri: "

+ oMyConstructorAnnotation.uri() + "; desc: "

+ oMyConstructorAnnotation.desc());

// get method annotation

Method oMethod = oMySample.getClass().getDeclaredMethod("setId" ,String. class );

MyMethodAnnotation oMyMethodAnnotation = oMethod

.getAnnotation(MyMethodAnnotation.class );

System.out.println("Method's uri: " + oMyMethodAnnotation.uri()

+ "; desc: " + oMyMethodAnnotation.desc());

// get field annotation

Field oField = oMySample.getClass().getDeclaredField("id" );

MyFieldAnnotation oMyFieldAnnotation = oField

.getAnnotation(MyFieldAnnotation.class );

System.out.println("Field's uri: " + oMyFieldAnnotation.uri()

+ "; desc: " + oMyFieldAnnotation.desc());

}

}

控制台打印结果:

[plain] view plain copy

Class's uri: com.ross.MySample; desc: The class name

Constructor's uri: com.ross.MySample#MySample; desc: The default constuctor

Method's uri: com.ross.MySample#setId; desc: The class method

Field's uri: com.ross.MySample#id; desc: The class field

至此本实例就完成了, 其实就是抓住两点一个是定义注解类,另外一个是如何访问注解, 就算是学会了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值