(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
注解的定义
文章目录
1.注解的定义
1.1注解的作用或者意义是什么?
(1)注解本身是没有任何意义的,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。
(2)Java注解(Annotation)又称Java标注,是JDK1.5引入的一种注释机制。是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。
(3)如果需要开发一些框架,做架构设计,那么注解就变得非常非常的有用。
(4)注解如何定义
- 定义类的时候用 @interface。
- 注解会有元素,元素可以指定基本数据类型,引用类型。
- 可以给注解元素增加一个默认值,default 加上数据类型的默认值。
package com.annotations.class1.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
public @interface Lance {
String value() default "注解作用于类上";
}
1.2元注解
(1)是注解上的注解
(2)上面案例中的@Target注解就是一个元注解,用来指示这个Lance注解可以作用于哪些元素类型上面。
(3)Java中有哪些元素呢,类名、方法、成员属性、方法参数。
(4)没有指定元注解@Target的Lance注解默认可以作用于一个类的任何位置,可以作用在类上,成员属性上,方法上,方法参数上。
package com.annotations.class1.test;
import com.annotations.class1.annotation.Lance;
/**
* @PackageName:com.annotations.class1.test
* @ClassName:Test1
* @Description:
* @author:青风百草
* @date:2020/9/5 10:09
*/
@Lance("注解作用在类上")
public class Test1 {
@Lance("注解作用在成员属性上")
private int age;
@Lance("注解作用在成员方法上")
public void getAge(){
}
public void setAge(@Lance("注解作用在方法参数上") int age){
}
@Lance("注解作用在静态方法上")
public static void main(String[] args) {
}
}
1.2.1 ElementType表示注解可以作用于哪些地方
package java.lang.annotation;
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
1.2.2 注解定义
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ClassAnnotation {
String value() default "注解作用于类上";
}
(1)value()是一个特殊的元素。
(2)可以为注解增加多个属性
(3)多属性注解定义如下
@ClassAnnotation(value = "注解作用于类上",id = "1")
public class Test2 {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
(4)多属性注解的使用
@ClassAnnotation(value = "注解作用于类上",id = "1")
public class Test2 {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1.2.3 @Target元注解指定当前注解作用于多个类元素上面
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({
ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface MultiAttrAnno {
}
1.2.4 @Retention注解的作用
(1)用于指定注解的保留级别
(2)注解本身是没有意义的,它结合了其他的的技术才有了更加丰富的运行场景,这一个运行场景有哪些呢?
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
1.2.5 小结
(1)在定义注解时,注解类也能够使用其他的注解声明。
(2)对注解类型注解的注解类,我们称之为元注解(meta-annotation)。
(3)声明的注解允许作用于哪些节点使用@Target声明;
(4)保留级别由@Retention声明。
(5)注解的保留级别如下:
- RetentionPolicy.SOURCE
标记的注解仅保留在源码级别中,并被编译器忽略。
- RetentionPolicy.CLASS
标记的注解在编译时由编译器保留,但Java虚拟机(JVM)会忽略。
- RetentionPolicy.RUNTIME
标记的注解由JVM保留,因此运行时环境可以使用它。
(6)SOURCE < CLASS < RUNTIME ,即CLASS包含了SOURCE,RUNTIME包含了SOURCE,CLASS。