注解是jdk1.5新增的特性.大家都知道,jdk1.5在java的发展史上有着划时代的意义.而注解的出现,在某种程度上颠覆了框架的设计.比如,spring在注解出现后,改善了原先五大组件的模式,增加了基于注解的实现方式.现在重点讲讲注解的使用.

元注解:
jdk1.5定义了4个元注解,元注解的作用是注解其他的注解.
1.@Retention
2.@Target
3.@Documented
4.@Inherited
@Retention用于指明该注解存在的时机.参数有三个值可选:RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME可供选择.分别表示:源码中保留注解,字节码文件中保留注解,运行时保留注解.
@Target用于指明注解能作用的范围.比如参数中设置为ElementType.TYPE,表示作用于类和接口.如果你用来注解方法,则会发生编译错误.由此可见它的功能是通过编译器实现的.
@Documented表明该注解在使用javadoc工具生成开发文档时,也会被纳入进去.
@Inherited表明,某个位置使用该注解,那么在存在Java继承关系的地方,该注解也能被继承过来.这个可能不好理解.下面的代码加以说明.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
@Inherited
public @interface AnnoInherited {
}
测试代码:
public class TestAnnoInherated {
public static void main(String[] args) {
Annotation[] annos=new Goo().getClass().getAnnotations();
for(Annotation a:annos){
System.out.println(a);
}
}
}
@AnnoInherited
class Foo{
}
class Goo extends Foo{
}
控制台输出:
@test.annotation.AnnoInherited()
上例中Goo前面并没有加注解@AnnoInherited,但是父类Foo前面有,而@AnnoInherited加了元注解@Inherited,所以Foo能继承过来.
自定义注解:
自定义注解的实例如下.
package test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnimalInfo {
String shout() default "";
//能不能看门
boolean isGuard() default true;
}
测试代码:
public class TestAnimalInfo {
public static void main(String[] args) {
Animal animal=new Animal();
AnimalInfo info=animal.getClass().getAnnotation(AnimalInfo.class);
if(info!=null){
Annotation anno=info;//此处并没有报错.Annotation是一个接口.info是一个注解.这是因为编译器会将注解编译成接口,并且继承了Annotation
System.out.println("Annotation类信息:"+Annotation.class);
System.out.println("AnimalInfo类信息:"+AnimalInfo.class);
Class[] cs=AnimalInfo.class.getInterfaces();
for(Class c:cs){
System.out.println(c); //AnimalInfo编译后就是一个接口,并且继承了Annotation,这里得到了证实.
}
System.out.println("info对象的类信息:"+info.getClass());
if("wangwang".equals(info.shout())&&info.isGuard()){
System.out.println("the animal is a dog");
}else if("miaomiao".equals(info.shout())&&!info.isGuard()){
System.out.println("the animal is a cat");
}else{
System.out.println("the animal is not a dog or cat");
}
}else{
System.out.println("it's not a animal");
}
}
}
@AnimalInfo(shout="wangwang",isGuard=true)
class Animal{
}
控制台输出:
Annotation类信息:interface java.lang.annotation.Annotation AnimalInfo类信息:interface test.annotation.AnimalInfo interface java.lang.annotation.Annotation info对象的类信息:class com.sun.proxy.$Proxy1 the animal is a dog
代码分析:从控制台可以看到.@AnimalInfo注解其实编译后就是接口,并且它继承了Annnotation.而通过反射获得的注解实例,名字为$Proxy1,是一个类的对象.可见,该注解实例是JVM通过动态代理技术生成的.这也揭示了注解特性的底层实现原理.关于注解的具体底层技术原理,这里不再详谈.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# 注解
# Java注解与反射原理说明
# Java注解处理器学习之编译时处理的注解详析
# Java注解Annotation与自定义注解详解
# Java注解处理器简单实例
# Java注解机制之Spring自动装配实现原理详解
# 深入理解 Java注解及实例
# 浅谈Java注解和动态代理
# 详解Java注解的实现与使用方法
# java注解的全面分析
# 全面剖析java中的注解(Annotation)
# 是一个
# 自定义
# 继承了
# 如果你
# 也会
# 大家都
# 也能
# 其他的
# 这也
# 可以看到
# 五大
# 可选
# 报错
# 设置为
# 会将
# 这是因为
# 则会
# 大家多多
# 可供选择
# 作用于
相关文章:
如何用西部建站助手快速创建专业网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何用花生壳三步快速搭建专属网站?
如何在万网ECS上快速搭建专属网站?
如何快速查询域名建站关键信息?
如何选择香港主机高效搭建外贸独立站?
如何选择高效稳定的ISP建站解决方案?
建站之星如何开启自定义404页面避免用户流失?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
宝塔建站教程:一键部署配置流程与SEO优化实战指南
建站之星上传入口如何快速找到?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
深圳网站制作案例,网页的相关名词有哪些?
开心动漫网站制作软件下载,十分开心动画为何停播?
宝塔新建站点报错如何解决?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何快速生成可下载的建站源码工具?
建站主机选哪种环境更利于SEO优化?
微信小程序 五星评分(包括半颗星评分)实例代码
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
PHP 500报错的快速解决方法
贸易公司网站制作流程,出口贸易网站设计怎么做?
用v-html解决Vue.js渲染中html标签不被解析的问题
c# await 一个已经完成的Task会发生什么
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何解决ASP生成WAP建站中文乱码问题?
北京网站制作的公司有哪些,北京白云观官方网站?
移民网站制作流程,怎么看加拿大移民官网?
广州商城建站系统开发成本与周期如何控制?
如何打造高效商业网站?建站目的决定转化率
深圳网站制作平台,深圳市做网站好的公司有哪些?
建站之星代理商如何保障技术支持与售后服务?
建站上传速度慢?如何优化加速网站加载效率?
php json中文编码为null的解决办法
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在阿里云部署织梦网站?
存储型VPS适合搭建中小型网站吗?
定制建站方案优化指南:企业官网开发与建站费用解析
Swift开发中switch语句值绑定模式
如何在阿里云完成域名注册与建站?
如何通过WDCP绑定主域名及创建子域名站点?
如何选购建站域名与空间?自助平台全解析
建站主机默认首页配置指南:核心功能与访问路径优化
网站制作软件有哪些,制图软件有哪些?
独立制作一个网站多少钱,建立网站需要花多少钱?
Android自定义控件实现温度旋转按钮效果
*请认真填写需求信息,我们会在24小时内与您取得联系。