zoukankan      html  css  js  c++  java
  • java进阶(42)--注解

    文档目录:

    一、概念

    二、注解的使用方法

    三、JDK内置注解

    四、元注释

    五、注解中定义属性

    六、反射注解的对象

    七、反射注解对象的属性值

    ---------------------------------------分割线:正文--------------------------------------------------------

    一、概念

    1、注解即注释:Annotation

    2、引用数据类型,编译之后包生成xxx.class文件

    3、自定义注解:语法[修饰符列表]@interface 注解类型名{}

     

    二、注解的使用方法

    1、注解使用时语法格式:@注解类型名

    2、注解可以出现在类、属性、方法、变量等几乎任意类型上

     

    三、JDK内置注解

    1、@Deprecated注解

    表示注解的元素已过时,有更好的解决方案

     

    2、@Override注解

    只能注解方法,给编译器参考的,如果不是重写父类方法时编译器会报错

    1     @Override
    2     public String toString() {
    3         return "AnnotationTest01{" +
    4                 "no=" + no +
    5                 '}';
    6     }

     

    四、元注释

    注解注解的注解

    1 @Target(ElementType.METHOD)
    2 @Retention(RetentionPolicy.SOURCE)
    3 public @interface Override {
    4 }

    1、@Target注解

    用来标注的注解可以出现在哪些位置上

    2、@Retention注解

    表示该注解被保存的位置

     

    五、注解中定义属性

    1、如果一个注解中有属性,那必须给属性赋值,除非属性有defalut默认值

    注解:

    package com.bk.java.Test42;
    
    public @interface MyAnnotation {
        String name();
        int no() default 1;
    }

    测试程序:

     1 package com.bk.java.Test42;
     2 
     3 public class AnnotationTest01 {
     4     @MyAnnotation(name="test01")
     5     private int no;
     6     public static void m1(){
     7         int i=100;
     8     }
     9     public AnnotationTest01(){
    10     }
    11 
    12     public String toString() {
    13         return "AnnotationTest01{" +
    14                 "no=" + no +
    15                 '}';
    16     }
    17 }

    2、如果属性值是value且只有一个属性时,使用时可以省略。

    注解:

    package com.bk.java.Test42;
    
    public @interface MyAnnotation {
        String value();
    }

    测试程序:

     1 package com.bk.java.Test42;
     2 
     3 public class AnnotationTest01 {
     4     @MyAnnotation("testvalue01")
     5     private int no;
     6     @MyAnnotation(value = "testvalue02")
     7     public static void m1(){
     8         int i=100;
     9     }
    10     public AnnotationTest01(){
    11     }
    12 
    13 }

    3、注解的属性类型为数组

    注解中可以使用的类型为:

    byte、short、int、long、float、double、boolean、char、String、Class以及每一种的数组形式

    注解:

    package com.bk.java.Test42;
    
    public @interface MyAnnotation {
        String value();
    }

    测试程序:当数组只有一个类型时,大括号可以省略

    1 package com.bk.java.Test42;
    2 
    3 public class OtherAnnotationTest01 {
    4     @OtherAnnotation(age = 10,email = {"zhang@123.com","li@qq.com"})
    5     public void doSome(){}
    6     @OtherAnnotation(age=25,email = "wang@wangyi.com")
    7     public void doOther(){}
    8 }

     

    六、反射注解的属性值

    注解:

    package com.bk.java.Test42;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation02 {
        String Value() default "北京";
    }

    注解测试:

    package com.bk.java.Test42;
    
    @MyAnnotation02
    public class MyAnnotationTest02 {
    
        int i;
        public MyAnnotationTest02(){
        }
        @MyAnnotation02
        public void  doSome(){
            int i;
        }
    }

    测试反射注解:

     1 package com.bk.java.Test42;
     2 
     3 public class ReflectAnnotationTest02 {
     4     public static void main(String[] args) throws ClassNotFoundException {
     5         //获取类
     6         Class c= Class.forName("com.bk.java.Test42.MyAnnotationTest02");
     7         //判断是否此类是否有注解对象
     8         if(c.isAnnotationPresent(MyAnnotation02.class)){
     9             MyAnnotation02 myAnnotation02=(MyAnnotation02)c.getAnnotation(MyAnnotation02.class);
    10             System.out.println("类上的注解对象"+myAnnotation02);
    11             //获取注解对象的属性
    12             String value=myAnnotation02.Value();
    13             System.out.println(value);
    14         }
    15     }
    16 }

    查看代码运行结果:

    类上的注解对象@com.bk.java.Test42.MyAnnotation02(Value=北京)
    北京

     

    七、反射方法上的注解信息

    注解:

     1 package com.bk.java.Test42;
     2 
     3 import java.lang.annotation.ElementType;
     4 import java.lang.annotation.Retention;
     5 import java.lang.annotation.RetentionPolicy;
     6 import java.lang.annotation.Target;
     7 
     8 @Target(ElementType.METHOD)
     9 @Retention(RetentionPolicy.RUNTIME)
    10 public @interface MyAnnotation03 {
    11     String username();
    12     String password();
    13 }

    注解测试:

     1 package com.bk.java.Test42;
     2 
     3 import java.lang.reflect.Method;
     4 
     5 public class MyAnnotationTest03 {
     6     @MyAnnotation03(username="admin",password = "123")
     7     public void doSome(){};
     8 
     9     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
    10         Class c=Class.forName("com.bk.java.Test42.MyAnnotationTest03");
    11         //获取doSome方法
    12         Method doSomeMethod=c.getDeclaredMethod("doSome");
    13         //判断方法上是否有这个注解
    14         if(doSomeMethod.isAnnotationPresent(MyAnnotation03.class)){
    15             MyAnnotation03 myAnnotation03=doSomeMethod.getAnnotation(MyAnnotation03.class);
    16             System.out.println(myAnnotation03.username());
    17             System.out.println(myAnnotation03.password());
    18         }
    19     }
    20 }

    查看运行结果:

    admin
    123

     

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/14618456.html
Copyright © 2011-2022 走看看