Java 注解入门

摘要:
1.什么是注解注解的语法:@注解名称;注解的作用:用来替代xml配置文件;在Servlet3.0中就可以使用注解来代替配置文件;注解是由框架来读取使用的;所有的注解都是Annotation的子类;简单说,注解是给程序(框架)看到,而注释是给人看的.2.注解的使用定义注解类:框架的工作;语法:public@interfaceMyAnnotation{....}.使用注解:程序员的工作;读取注解(反射

1.什么是注解

  1. 注解的语法: @注解名称;
  2. 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件;
  3. 注解是由框架来读取使用的;
  4. 所有的注解都是 Annotation 的子类;
  5. 简单说, 注解是给程序(框架)看到, 而注释是给人看的.

2. 注解的使用

  • 定义注解类: 框架的工作; 语法: public @interface MyAnnotation{....}.
  • 使用注解: 程序员的工作;
  • 读取注解(反射): 框架的工作;

3. 注解的属性

3.1 定义属性
  • 格式: 类型 属性名();
// 定义属性
    @interface MyAnno2 {
        int age();  // 定义属性 age
        String name(); // 定义属性 name
        String value() default "hello world!";  // value 是带有默认值的属性
    }
3.2 使用注解时,给属性赋值
    @MyAnno2(age=100, name="zhangsan")
    public class Demo{
        ......
    }
3.3 属性名为 value 的特权
  • 当使用注解时, 如果只给名为 value 的属性赋值时,可以省略 "value="
    例如: @MyAnno(value="hello") 可以书写成 @MyAnno("hello")
3.4 注解属性的类型
  • 八种基本数据类型
  • String 类型
  • Enum 类型
  • Class 类型
  • 注解类型
  • 以上类型的一维数组类型
  • Integer 类型不可以
    @MyAnno2(
        // 为注解属性赋值
        a=100,
        b="hello",
        c=MyEnum1.A,
        d=String.class,
        e=@MyAnno3(aa=200,bb="world"),
        f={"",""}  // 如果数组中的元素个数为1时, 可以省略大括号
    )
    public class Demo{

    }

    // 定义注解
    @interface MyAnno2 {
        int a();
        String b();
        MyEnum1 c(); // Enum 类型
        Class d();
        MyAnno3 e();
        String[] f(); // 数组类型
    }

    @interface MyAnno3 {
        int aa();
        String bb;
    }

4. 注解的作用目标限定以及保留策略限定

4.1 注解的作用目标限定
  • 使用方式: 在定义注解时,给注解添加 @Target 注解;
    @Target(value={ElementType.Type, ElementType.METHOD, ElementType.FIELD})
    @interface MyAnno2{

    }

    // ElementType 是枚举类型
    // 可选值: TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,
    //       ANNOTATION, PACKAGE
4.2 保留策略
  • 源代码文件(SOURCE): 注解只能在源代码中存在,当编译时,就被忽略了;
  • 字节码文件(CLASS): 注解在源代码中存在,然后编译时,会把注解信息放到 class 文件,但 JVM 在加载类时,会忽略注解;
  • JVM (RUNTIME): 注解在源代码,字节码文件中存在,并且在 JVM 加载类时,会把注解加载到 JVM 内存中(它是唯一可反射注解!!)
    // 限定注解的保留策略, Retention 为枚举类型
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnno2 {....}

参考资料:

免责声明:文章转载自《Java 注解入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python3与FastDFS交互(py3Fdfs)ios-UIWebView中js和oc代码的互调下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF学习笔记:ComboBox的数据绑定

UI <UserControl x: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"...

Socket与Http方式解析发送xml消息封装中间件jar包

  最近项目代码中太多重复的编写Document,不同的接口需要不同的模板,于是重写提取公共部分打成jar包,方便各个系统统一使用~   提取结构:    Http连接方式: import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import...

Android的string-array数据源简单使用

在Android中,用string-array是一种简单的提取XML资源文件数据的方法。 例子如下: 把相应的数据放到values文件夹的arrays.xml文件里 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="city"&...

C# 通过反射实现复杂对象的深拷贝(附源码)

背景   在C#中我们很多时候需要对一个对象进行深拷贝,当然如果已知当前对象类型的时候我们当然可以通过创建新对象逐一进行赋值的方式来进行操作,但是这种操作非常繁琐而且如果你在做一个顶层框架的时候要实现这样一个功能,并且深拷贝的方式复制的对象是一个object类型,这个时候这个方式就不再适用了,可能还有很多说可以通过序列化和反序列化的方式进行对象的深拷贝但还...

实战MEF(5):导出元数据

如何理解元数 我们可以把元数据理解为随类型一起导出的附加信息。有时候我们会考虑,把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件。 默认的类型导出带有元数据吗 上面的内容我说得比较简洁,也许您不是很理解,不要紧,在编程里面,很多东西我们都是写了代码后才理解的。所以,我的理论功底比较差,最不擅长的就是长篇大论,还是从代码中看吧。...

乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 Windows UI Library (WinUI)

什么是Windows UI Library (WinUI) The Windows UI Library (WinUI) is a native user experience (UX) framework for both Windows desktop and UWP applications. Windows UI库(WinUI)是适用于Windo...