博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java注解入门
阅读量:6848 次
发布时间:2019-06-26

本文共 1866 字,大约阅读时间需要 6 分钟。

[TOC]

前言

注解(也被称为元数据)为我们在代码中添加信息提供了一中形式化的方法,是我们可以在稍后的某个时刻非常方便地使用这些数据;

基本语法

Javase5自带的标准注解

定义在了Java.lang中

  • @Override,表示当前方法的定义将会超类中的方法。
  • @Deprecated,如果程序使用了该注解的元素,编译器会发出警告信息。个人理解为过时吧;
  • @SuppressWarnings,关闭不当的编译器警告信息;

四个元注解

元注解专职负责注解其他的注解


@Target 表示该注解可以用于什么地方。可能的ElementType参数有:
CONSTRUCTOR: 构造器的声明
FIELD : 域声明(包括enum实例)
LOCAL_VARIABLE :局部变量声明
METHOD : 方法声明
PACKAGE :包声明
PARAMETER :参数声明
TYPE :类,接口(包括注解类型)或enum声明
@Retention 表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数:
SOURCE :注解将被编译器丢弃
CLASS :注解在class文件中可用,但会被VM丢弃
RUNTIME :VM将在运行时期也保留注解,因此可以通过反射获取注解的信息
@Documented 将次注解包含在Javadoc中
@Inherited 允许子类继承父类中的注解

注解中的元素

注解元素的可用类型:

  • 所有的基本类型(int,float,double,boolean,long,short,byte,char)
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组形式

如果使用其他类型,编译器会报错,也不允许使用其他任何包装类型;

自定义注解

注解源代码

/** * @author gyc * @date 2018/8/2 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface AnnotationOne {    String name() default "";    int age() default 1;}复制代码

测试代码

public class Test {    public static void main(String[] args) throws ClassNotFoundException {        //获取class        Class
aClass = Class.forName("com.example.demo.annotation.one.User"); //获取类中的定义 Method[] declaredMethods = aClass.getDeclaredMethods(); for (Method method:declaredMethods){ //根据注解class对象获取method的注解 AnnotationOne annotation = method.getAnnotation(AnnotationOne.class); System.out.println(method.getName()+"的注解:"); System.out.println("name的值是:"+annotation.name()+" age的值是:"+annotation.age()); System.out.println(); } }}class User{ @AnnotationOne(name = "aaa",age = 10) public void testOne(){ } @AnnotationOne() public void testTwo(){ }}复制代码

运行结果:

testOne的注解:name的值是:aaa   age的值是:10testTwo的注解:name的值是:   age的值是:1复制代码

总结

  • 整体上来说还是没有什么难度吧,很快就能入门,前提是要知道反射
  • 平时开发过程中自己几乎不会定义注解,但是使用的注解却不计其数,也大概知道了注解的原理

转载地址:http://fylul.baihongyu.com/

你可能感兴趣的文章
理解Lucene中的Query
查看>>
Specified key was too long; max key length is 767 bytes
查看>>
TCP连接状态详解
查看>>
亿级Web系统搭建——单机到分布式集群
查看>>
[Redis]windows下redis的安装和启动
查看>>
推断某个值是否在某个范围汇编优化
查看>>
Servlet过滤器
查看>>
高速查找素数
查看>>
warning:deprecated conversion from string constant to 'char *'
查看>>
Git的日常处理流程
查看>>
生产者消费者模型
查看>>
tcpdump的简单使用
查看>>
ERROR: Java 1.7 or later is required to run Apache Drill.
查看>>
Mobile 抓包,代理
查看>>
初入android驱动开发之字符设备(一)
查看>>
外网上传到NAS速度很慢是什么情况?上行1M都不到,但是测试有4M
查看>>
ASP.NET Core 中使用 GrayLog 记录日志
查看>>
RabbitMQ的几种工作模式
查看>>
关于Java类加载双亲委派机制的思考(附一道面试题)
查看>>
java中关于volatile的理解疑问?
查看>>