java 注解

一、创建

1、注解创建

public @interface Book {
}

2、注解属性

数据类型   名称();
数据类型   名称() defalut value; value是默认值

3、定义的数据类型

a、四类八种

b、String类型,class类型,枚举类型,注解类型

c、以上类的一维数组

package com.wt.anno;

public @interface Book {
    String bookName();
    String[] author();
    int sale() default 20;
}

二、使用(为注解属性赋值)

1、使用位置

类、方法、成员变量、局部变量、参数位置

2、使用格式

@注解名(属性名=值, 属性名=值, 属性名={元素1,元素2}) // 数组

注意:

a、空注解可以直接使用

b、不同位置可以使用同一注解

c、如果注解中有默认值,可以不赋值

d、如果只有一个属性,且属性名加value,那么使用注解的时候,属性名不用写,直接写值

package com.wt.anno;

@Book(bookName = "如何勾引富婆", author = {"浪子", "贾宝玉"})
public class BookSelf {

}

3、解析

a、判断有没有注解

// 反射类 
Class<被注解类> 名称 = 被注解类.class;
名称.isAnnotationPresent(被注解类.class);

b、使用

被注解类 对象名称 = 名称.getAnnotation(被注解类.class);
System.out.println(对象.注解属性());

c、案例

package com.wt.anno;

import org.junit.Test;

public class Test01 {
    @Test
    public void useAnno(){
        Class<BookSelf> bookSelfClass = BookSelf.class;
        boolean b = bookSelfClass.isAnnotationPresent(Book.class);
        System.out.println(b);
        if (b){
            Book book = bookSelfClass.getAnnotation(Book.class);
            System.out.println(book.bookName());
        }
    }
}

4、使用元注解,在注解上使用

a、控制注解使用位置----@Target

属性:ElementType

成员:

  TYPE:只能在类上使用

  FIELD:属性

  METHOD:方法

  PARAMETER:参数

  CONSTRUCTOR:构造

  LOCAL_VARIABLE:局部变量

b、控制生命周期----@Retention

属性:RetentionPolicy

成员:

  SOUREC:默认

  CLASS:在class文件中出现

  RUNTIME:在内存在出现

package com.wt.anno;

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)
public @interface Book {
    String bookName();
    String[] author();
    int sale() default 20;
}

测试代码

package com.wt.anno;

import org.junit.Test;

public class Test01 {
    @Test
    public void useAnno(){
        Class<BookSelf> bookSelfClass = BookSelf.class;
        boolean b = bookSelfClass.isAnnotationPresent(Book.class);
        System.out.println(b);
        if (b){
            Book book = bookSelfClass.getAnnotation(Book.class);
            System.out.println(book.bookName());
        }
    }
}

 

posted @ 2025-04-22 20:07  市丸银  阅读(9)  评论(0)    收藏  举报