java注解(Annotation)

java的注解是java5.0版本引入的,我们在使用框架时也经常见到它的身影。JDK自身提供的一个非常常见的注解就是@Override,他能告诉编译器这是一个重载方法,若父类不存在该方法,编译器就会报错。但你重载一个方法却不用这个注解,也是完全不影响运行结果的。

         那什么是java注解呢?Java提供的一种源程序中的元素关联任何信息和任何元素的途径和方法。下面我讲几种关于注解的分类:




说完分类,我们再来说说元注解元注解简单来说就是注解的注解。


它这个继承用在接口上是不起效果的,只有用在类上才行,而且继承只会继承类上的注解

而不会继承(已被重写的)方法上的注解。

      

        

下面来一个注解解析的简单小栗子:

package Anno;

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

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
	//无参无异常
	String desc();
	String author();
	int age() default 18;
}
package Anno;

import test.Person;

@Description(author = "czj", desc = "class")
public class Haveanno implements Person {

	@Override
	@Description(author = "czj", desc = "method")
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int age() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub
		
	}

}
package Anno;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class ParseAnn {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//使用类加载器加载类
		try {
			Class c = Class.forName("Anno.Haveanno");
			//找到类上面的注解
			boolean isExist = c.isAnnotationPresent(Description.class);
			//如果该注解存在
			if(isExist) {
				Description description = (Description) c.getAnnotation(Description.class);
				//输出desc的值
				System.out.println(description.desc());
			}
			
			//找到方法上的注解
			Method[] methods = c.getMethods();
			for(Method method : methods) {
				boolean isMeExist = method.isAnnotationPresent(Description.class);
				
				if(isMeExist) {
					Description description = (Description) method.getAnnotation(Description.class);
					System.out.println(description.desc());
				}
			}
			
			//另一种找到方法上的注解写法
			for(Method method : methods) {
				Annotation[] annotations = method.getAnnotations();
				
				for(Annotation annotation : annotations) {
					if(annotation instanceof Description) {
						Description description = (Description) annotation;
						System.out.println(description.desc());
					}
				}
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
注解在框架中使用的非常多,如Hibernate,spring等等,但为什么要使用注解呢?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值