java注解

注解Annotation

作用:

  • 可以被其他程序读取
  • 对程序作出解释(与comment注释 相同)

注解以“@注释名”在代码中存在,还可以添加一些参数值,例如:@SupperessWarnings(value="unchecked")

一般附加在package,class,method,field等上面,相当于给他们添加额外的辅助信息,可以通过反射机制编程实现对这些元素数据的访问

内置注解

@Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明

@Deprecated :定义在java.lang.Deprecated中,此注释可以用于修辞手法,属性,类,表示不鼓励使用这样的元素,通常是因为它很危险或者存在更好的选择

@SuppressWarning :定义在java.lang.SuppressWarning中 ,用来抑制编译时的警告信息,需要添加一个参数才能正确使用

此时标黄的部分具有警告信息:

image

添加一个压制警告注解@SuppressWarning(""),警告信息消除:

image

package com.yuanyu.annotation;

import java.util.ArrayList;
import java.util.List;

public class Test01 extends Object {

    //@Override重写的注解
    @Override
    public String toString() {
        return super.toString();
    }

    //@Deprecated 不推荐程序员使用的,但是可以使用,或者存在更好的方式
    @Deprecated
    public static void test(){
        System.out.println("Deprecated");
    }

    // @SuppressWarnings("all") 用于压制警告信息
    @SuppressWarnings("all")
    public void test2(){
        List list=new ArrayList();
    }

    public static void main(String[] args) {
        test(); //Deprecated
    }
}

元注解

作用:负责注解其他注解

java定义了四个标准的mata-annotation类型,他们被用来提供对其他annotation类型作说明

**@Target,@Retention, @Document, @Inherited **(这些类型和它们所支持的类在java.lang.annotation包中可以找到)

@Target:用于描述注解的使用范围

@Retention:表示需要在什么级别保存改注释信息,用于描述注释的生命周期

(SOURCE<CLASS<RUNTIME)

@Document:说明该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类的该注解

点开Target的源码:

image

点开源码中的ElemType可以看到@Target注解的值

image

点开Retention源码:

image

点开RetentionPolicy的源码:

image

package com.yuanyu.annotation;

import java.lang.annotation.*;

//测试元注解
@MyAnnotation
public class Test01{

    @MyAnnotation
    public void test(){

    }
}

//定义一个注解
//@Target表示注解的使用范围
@Target(value ={ ElementType.METHOD,ElementType.TYPE})
//@Retention表示注解在什么地方才有效
@Retention(value = RetentionPolicy.RUNTIME)
//@Documented表示是否将注解生成在javadoc中
@Documented
//@Inherited表示子类可以继承父类的注解
@Inherited
@interface MyAnnotation{

}


自定义注解

使用@interface自定义注解时,自动继承java.lang.annotation.Annotation接口

package com.yuanyu.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//自定义注解
public class Test02 {
    @MyAnnotaion2(name =" yuanyu",schools = "华科") //注解可以显式赋值,如果没有默认值,则必须要给注解赋值
    public void test2(){}
    @MyAnnotation3("原语")
    public void test3(){}
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotaion2{
    //定义注解的参数:参数类型+参数名+();
    String name();
    //String name() default "";
    int age() default 0;
    int id() default -1; //如果默认值为-1,则表示不存在(index)
    String[]  schools();
    //String[]  schools() default {"",""};
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
    String value(); //如果注解只有一个值,那么直接使用value
}
posted @   原语  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示