java注解
一、注解
框架的底层就是注解和反射
注解(Annotation):不仅提供给人解释说明,也供程序解释读取,和注释(comment)是有区别的。
1.1、什么是注解:
- Annotation是从JDK开始引入的新技术。
- Annotation的作用
- 不是程序本身,可以对程序作出解释(这一点和注释(comment)没什么区别)
- 可以被其他程序(比如:编译器等)读取
- Annotation的格式
- 注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")
- Annotation在哪里使用
- 可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
1.2、内置注解
- @Override:定义在java.lang.Override中,此注释只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法的声明。
- @Deprecated:定义在java.lang.Deprecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
- @SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息,需要添加参数,这些参数是已经定义好的,
- @SuppressWarnings("all")
- @SuppressWarnings("unchecked")
- @SuppressWarnings(value={"unchecked","deprecation"})
package com.xiaoxiao.Annotation;
import java.util.ArrayList;
import java.util.List;
public class TestDemo01 {
public static void main(String[] args) {
test01();
}
@Override //重写方法的注解
public String toString() {
return super.toString();
}
@Deprecated //表示废弃的方法,不建议程序员使用,可能存在小bug或有更好的方法,但是也能使用
public static void test01(){
System.out.println("test01");
}
public void test02(){
@SuppressWarnings("all")//抑制警告,可以放在方法,字段等元素上,可以消防警告
List list=new ArrayList();
}
}
1.3、元注解
- 元注解的作用就是负责注解其他注解,java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明
- 这些类型和它们所支持的类在java.lang.annotation包中可以找到(@Target、@Retention、@Documented、@Inherited)
- @Target:用于描述注解的使用范围(即被描述的注解可以用在什么地方)
- @Retention:表示需要在什么级别保存该注释信息,即在哪个状态注解依然有效,用于描述注解的生命周期
- SOURCE<CLASS<RUNTIME
- @Document:说明该注解将被包含在javadoc中
- @inherited:说明子类可以继承父类中的该注解
package com.xiaoxiao.Annotation;
import java.lang.annotation.*;
@MyAnnotation
public class Meta_AnnotationDemo {
@MyAnnotation
public void test(){
}
}
//Target元注解,表示注解的适用范围
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//Retention元注解,中文翻译为保留,表示注解的生命周期,RUNTIME>CLASS>SOURCE
@Retention(RetentionPolicy.RUNTIME)
//表示该注解可包含在javadoc文件中
@Documented
//表示该注解可以被子类继承
@Inherited
@interface MyAnnotation{
}
1.4、自定义注解
- 使用@interface自定义注解时,自动继承了java.lang.annotation.Anonotation接口
- 分析
- @interface用来声明一个注解,格式:public @ interface 注解名
- 其中的每个方法实际上是声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值只能是基本类型,class,String,enum)
- 可以通过default来声明参数的默认值
- 如果只有一个参数成员,一般参数名为value,不用value则在赋值时需要指定参数名称
- 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值
package com.xiaoxiao.Annotation;
import java.lang.annotation.*;
//自定义注解
public class AnotationDemo02 {
//注解可以显式赋值,如果没有默认值,则必须赋值,如果注解中参数有且只有value,可以直接赋值,但如果有多个参数,需要指定value名称
@MyAnotation03(name="韩信",hah=AnotationDemo02.class,value = true)
public static void main(String[] args) {
}
@MyAnotation04(true)
public void test(){}
//可以通过反射来访问注解
}
//注解作用范围
@Target({ElementType.TYPE,ElementType.METHOD})
//注解的生命周期
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface MyAnotation03{
//注解的参数:参数类型+参数名+();
String name() default "";
int age() default 0;
Class hah() default TestDemo01.class;
boolean value();
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnotation04{
//注解的参数:参数类型+参数名+();
boolean value();
}
本文来自博客园,作者:一只快乐的小67,转载请注明原文链接:https://www.cnblogs.com/sp520/p/16350513.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析