关于注解

注解

概述

注释:// /**/ <!-- --!> 给人看的

注解:给程序(编译器,类加载器,JVM)看的

注解的作用:在一些使用的场景中代替实现轻量级的配置

(副作用:增加了了耦合度)

常见注解

@Override

  • 重写父类方法.给编译器看,在编译时雁阵该方法是否符合重写的规则.
Override
	public String toString(){
		return super.toString();
	}

@SuppressWarnings

  • 抑制编译器
  • 该注解标识的方法内部不会发出编译警告
@SuppressWarnings("unused")
	public void lol(){
		int x=8;
	}

@Deprecated

-表示方法已经过时

@Deprecated
	public static void sleep(){
		
	}

注解的开发流程

  • 定义注解->反射注解->使用注解
  • @注解名称[(属性名 1=值,属性名 2=值…)]
  • 使用时可以附属性赋值,也可以没有属性赋值

自定义注解

public @interface test {

}	
  • 底层帮我们自动实现了 java.lang.annotation.Annotatino
  • 定义注解的时候只能使用@interface来定义,不能手实现

注解的属性

1. 和接口中的方法定义类似:public配型 属性名称() [default…];可以default指定默认值.
2. 如果属性定义是没有指定默认值,那么对应注解使用的时候必须为该属性赋值.
3. 如果某些场景,使用注解是必须为其中某一属性赋值,赋值完成之后该注解才可以被使用,那么不要使用default指定默认值.
4. 特殊属性value,单独危改属性赋值是,"value="可以省略;除了为value赋值以外,同时还需要为其他属性赋值,这是"value="不可以省略.
5. 属性的类型通常是巴中基本数据类型.Class类/枚举/String.
6. 为数组类型的属性赋值是,如果值只有一个,那么赋值是"{}"可以省略.

源生注解

  • 在定义注解是,如果没有使用Target指定,默认都可以使用.如果使用了Target指定使用的位置,那么该注解只能在他所指定的位置使用.

@Retention

@Retention(RetentionPolicy.SOURCE):表示注解的保留域.
.java -> .class -> 加载至内存 -> 运行

SOURCE 给编译器看的,编译器看完后不再保留.生成的.class字节码文件中不再保留该类型的注解.
CLASS 给类加载器看的,在类加载是根据相关的注解做一些引导操作.编译时(.class字节码文件中保留),类加载时使用后丢弃.
RUNTIME 给JVM看的.编译器编译后保留,类加载器加载后保留,JVM执行时保留.

@Documented

  • 如果在注解上定义@Documented则会在生成的javadoc中显示所使用的注解

反射注解

前提条件:注解要想被反射的到,注解的保留域必须指定为RUNTIME,否则反射不到。
jdk中提供的注解反射接口:AnnotatedElement,提供了以下方法:

 xxx.getClass.getAnnotation(Class<T> annotationClass);

返回直接存在于此元素(类或接口、方法、…)上的所有注解。

 boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 

如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值