一.java注解(Annotation):

jdk5.0中添加了新的特性注解,与接口很类似,但注解也是java的一种类型,注解的作用非常多例如进行编译检查、生成说明文档、代码分析等。

jdk提供的常用注解:

1. @Override:

表示子类要重写父类对应的方法。

例子:

class Father {public void present(){System.out.println("Father");}public static void a(){System.out.println("a");}
}
public class Son extends Father {//@Override表示重写父类中的present()方法。@Overridepublic void present() {super.present();}/*静态方法是不能重写的,所以当我们加上@Override时,会提示错误。@Overridepublic static void a(){System.out.println("a");}*/
}

2.@Deprecated:

表示该方法是不建议使用的。

例子:

public class Test {@Deprecatedpublic void put(){System.out.println("Test");}
}
public class Test2 {public static void main(String[] args) {Test t = new Test();//当时用这个方法时就会有警告,表示当前方法是不赞成使用的。t.put();}
}

3.@SuppressWarnings:

该注解表示压制警告。

参数值列表:
deprecation:过时的类或方法警告。
unchecked:执行了未检查的转换时警告。
fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。
path:在类路径、源文件路径等中有不存在的路径时的警告。
serial:当在可序列化的类上缺少serialVersionUID定义时的警告。
finally:任何finally子句不能完成时的警告。
all:关于以上所有情况的警告。

例子:

public class Test2 {@SuppressWarnings({ "deprecation" })public static void main(String[] args) {Test t = new Test();//当时用这个方法时就会有警告,表示当前方法是不赞成使用的。t.put();}
}

二.自定义注解:

如何定义注解:

public @interface MyAnnotation {//当我们使用value作为属性名时,我们在对其赋值时可以不指定属性的名称,而直接写上属性就可以了。这种方式只对value单一一个传值时才适用。//除value以外的属性名,则都需要 name=value 这种赋值方式,明确的指出赋值的对象是谁。//例如@SuppressWarnings({ "deprecation" }),如此的传值,如果多个值,就需要用花括号括起,每个值之间加逗号。String value() ;//默认值为hello。String hello() default "hello";
}

当我们使用@interface关键字定义一个注解时,该注解隐含的继承了java.lang.annotation.Annotation接口,如果我们定义了一个接口,并让接口继承Annotation,那么我们所定义的接口依然还是接口而不是注解,Annotation本身是借口而不是注解。

如何使用自定义注解:

public class Test {@MyAnnotation("a")public void  a(){System.out.println("A");}@MyAnnotation(value="b",hello="c")public void b(){System.out.println("B");}
}

二.注解应用:

@Target的使用:

指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。

必需元素摘要
ElementType[] value
public abstract ElementType[] value

当定义那种类型则只能对该类型的程序元素上使用该注解:

枚举常量摘要
ANNOTATION_TYPE
注释类型声明
CONSTRUCTOR
构造方法声明
FIELD
字段声明(包括枚举常量)
LOCAL_VARIABLE
局部变量声明
METHOD
方法声明
PACKAGE
包声明
PARAMETER
参数声明
TYPE
类、接口(包括注释类型)或枚举声明

例子(只能用于方法的注解定义):

注解:

@Target(ElementType.METHOD)
public @interface MyAnnotation {}
public class MyTest {@MyAnnotation()public void a(){System.out.println(" a ");}@MyAnnotation()public void b(){System.out.println(" b ");}
}

当ElementType.METHOD则为专门对方法修饰的注解。如果放于其他位置则会报错。

对于注解如何使用反射:

@Retention

必需元素摘要
RetentionPolicy value
public abstract RetentionPolicy value
枚举常量摘要
CLASS
编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
RUNTIME
编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE
编译器要丢弃的注释。

例子:

注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {//表示默认值为helloString hello() default "hello";String world();
}
public class MyTest {@Deprecated@MyAnnotation(world="java")public void output(){System.out.println("output !");}}
public class Test {public static void main(String[] args) throws Exception {Class<MyTest> c = MyTest.class;//获取指定的方法Method  method = c.getMethod("output",new Class[]{});//如果指定类型的注释存在于此元素上,则返回 true,否则返回 falseif(method.isAnnotationPresent(MyAnnotation.class)){//执行output方法method.invoke(new MyTest(),new Object[]{});MyAnnotation ma = method.getAnnotation(MyAnnotation.class);//返回字符串String str = ma.hello();String str2 = ma.world();System.out.println(str+" , "+str2);}//获得方法上存在的注解类型Annotation[] annotations = method.getAnnotations();for(Annotation annotation : annotations){System.out.println(annotation.annotationType().getName());}}
}

打印:

output !
hello , java
java.lang.Deprecated
lzr.annotation.MyAnnotation



java(21) - 注解详解相关推荐

  1. java springmvc注解详解_springMVC注解开发详解(转)

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  2. Java基本注解详解(超级详细)

    原文链接: 今日头条 Java注解是一个很重要的知识点,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解. 掌握好Java注解有利于学习框架底层实现.@mikechen Ja ...

  3. java自定义注解详解

    一: 注解的概念 1.1 注解的官方定义 首先看看官方对注解的描述: An annotation is a form of metadata, that can be added to Java so ...

  4. java中注解 详解

    本文将向你介绍J2SE5.0中的新特性之一:注解.本文将从什么是注解:J2SE5.0中预定义的注解:如何自定义注解:如何对注解进行注解以及如何在程序中读取注解5个方面进行讨论. 一.什么是注解 说起注 ...

  5. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  6. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  7. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  8. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. Python:PDB文件中原子和残基重新编号
  2. 5.7.20mysql修改密码,ubuntu系统mysql5.7.20忘记root密码修改
  3. 利用jquery getJSON 调用ashx实现ajax调用
  4. 统计问题(HDU-2563)
  5. vector中resize和reserve接口的异同
  6. C# in depth (第六章 实现迭代器的捷径)
  7. 【EXLIBRIS】图洛克《收入再分配的经济学》中译本序 【ZZ】
  8. 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
  9. Activity 生命周期图解
  10. 面试疑点:几道题答了一个小时,应该是等答案
  11. 苹果cms去掉html,苹果cmsV10 隐藏显示视频设置教程
  12. 微信小程序使用webview打开pdf文档及显示网页内容
  13. 谷哥学术2022年2月资源分享下载列表 16/20
  14. PHP爬虫的三种方法
  15. Android vivo美颜相机相册 照亮你的美 图片压缩 图片滤镜,裁剪(附带完整项目源码)
  16. Java后端开发工作 - 写接口
  17. H3C室外无线AP(WA4320X)胖瘦切换设置方法
  18. 数学建模方法-灰色预测
  19. java编程的一个猜数字有趣小游戏
  20. 华为和H3C--VRP基础和基本的操作

热门文章

  1. [排错] Status error 2850
  2. Silverlight 用户代码未处理 TypeLoadException
  3. HTML5安全风险详析之三:WebSQL攻击
  4. 揭开PC-Lint9的神秘面纱
  5. 重磅!阿里巴巴Blink正式开源,重要优化点解读\n
  6. 区块链技术应用——站在风口上猪都会飞
  7. 独家披露51CTO被黑过程:数据库已小范围流传
  8. Service(一)
  9. 1. JanusGraph的优势
  10. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.3 执行计划各个列的含义...