java注解
注解Annotation
作用:
- 可以被其他程序读取
- 对程序作出解释(与comment注释 相同)
注解以“@注释名”在代码中存在,还可以添加一些参数值,例如:@SupperessWarnings(value="unchecked")
一般附加在package,class,method,field等上面,相当于给他们添加额外的辅助信息,可以通过反射机制编程实现对这些元素数据的访问
内置注解
@Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明
@Deprecated :定义在java.lang.Deprecated中,此注释可以用于修辞手法,属性,类,表示不鼓励使用这样的元素,通常是因为它很危险或者存在更好的选择
@SuppressWarning :定义在java.lang.SuppressWarning中 ,用来抑制编译时的警告信息,需要添加一个参数才能正确使用
此时标黄的部分具有警告信息:
添加一个压制警告注解@SuppressWarning(""),警告信息消除:
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的源码:
点开源码中的ElemType可以看到@Target注解的值
点开Retention源码:
点开RetentionPolicy的源码:
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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!