注解
1、什么是注解
java.annotation包Annotation是从JDK1.5开始引入的新技术,注解即可以对程序员解释又可以对程序解释
2、注解与注释的区别
注释:对程序员解释代码信息注解:对程序和程序员解释代码信息
3、注解的所用
- 不是程序本身,可以对程序作出解释(与注释(comment)类似)2. 可以被其他程序(编译器)读取
4、注解的格式
注解是以“@注释名”在代码中存在的,还可以添加一些参数例如:@SuppressWarnings(value=“unchecked”)
5、注解的应用
可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制实现对这些数据的访问
6、内置注解
@Overrlde:定义在java.lang.Override中,此注解只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明
@Deprecated:定义在java.lang.Deprecated中.此注解可以用于修饰方法,属性,类。表示不鼓励使用这样的元素.通常是因为它很危险或者存在更好的选择
@SuppressWarnings:镇压警告,定义在java.lang.SuppressWarnings中用来抑制编译时的警告信息,与前两个注释有所不同.你需要添加参数才能正确使用。这些参数都是已经定义好了的.我们选择性的使用就好了
@SuppressWarnings(“all”)抑制所有类型的警告信息@SuppressWarnings(“unchecked”)抑制单类型的警告信息
@SuppressWarnings(value={“unchecked”,“deprecation”})抑制多类型的警告信息
7、元注解
元注解的作用:负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明这些类型和它们所支持的类在java.lang.annotation包中可以找到
(@Target,@Retention,@Documented,@Inherited )
*@Target*:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
*@**Retention*:表示需要要在什么级别保存该注择信息,用于描述注解的生命周期 (SOURCE < CLASS < *RUNTIME*)
@Document:说明该注解将被包含在javadoc中@lnherited:说明子类可以继承父类中的该注解
8、自定义注解
1、内置注解
package com.xx.annotate;
import java.util.ArrayList;
/**
* 内置注解
* @override--重写父类方法
* @SuppressWarnings("all")镇压警告
* @deprecated--弃用的注解
* */
public class Test01 {
//弃用的注解
@Deprecated
public void method(){}
//镇压警告
@SuppressWarnings("all")
public void method01(){
ArrayList list = new ArrayList();
list.add(100);
list.add(123.1234);
}
//重写父类方法
@Override
public String toString() {
return super.toString();
}
}
2、自定义注解的用法一
@Target(ElementType.METHOD)
- @Target:这个元注解用于指定被修饰的注解可以应用于哪些Java元素上。
- ElementType.METHOD:这是
ElementType
枚举的一个值,表示被修饰的注解只能应用于方法上。因此,这个
@Target(ElementType.METHOD)
意味着紧随其后的注解只能被应用于方法上。@Retention(RetentionPolicy.RUNTIME)
- @Retention:这个元注解用于指定被修饰的注解的生命周期。
- RetentionPolicy.RUNTIME:这是
RetentionPolicy
枚举的一个值,表示被修饰的注解在运行时仍然可见,可以被JVM读取。在Java中,注解有三种保留策略(Retention Policies):
- SOURCE:注解只保留在源码中,编译时会被丢弃。
- CLASS:注解被保留在class文件中,但JVM加载class文件时会忽略它。
- RUNTIME:注解被保留在class文件中,且可以在运行时通过反射机制被读取。
因此,
@Retention(RetentionPolicy.RUNTIME)
意味着紧随其后的注解在运行时仍然可见,可以被JVM读取和使用。
1、注解
package com.xx.annotate02;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
}
2、使用
package com.xx.annotate02;
public class Test01 {
/**
*
* 自定义注解
*
* */
@MyAnnotaction
public void method(){}
}
3、自定义注解的用法二
1、注解
package com.xx.annotate03;
//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//类, 属性, 构造方法, 方法, 用于方法的参数
@Target({TYPE,FIELD,CONSTRUCTOR,METHOD,PARAMETER})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
String value();
}
2、使用
package com.xx.annotate03;
public class Test01 {
/**
*
* 自定义注解
* 根据我们写的注解可以应用在以下范围上
*
* */
@MyAnnotaction("aaa")
//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
//您正在为 value 元素提供字符串值 "aaa"。
//写在方法上
public void method(){
}
//写在无参构造上
@MyAnnotaction("aaa")
public Test01(){
}
//写在属性上
@MyAnnotaction("aaa")
String str;
//写在参数上
@MyAnnotaction("aaa")
public void method02(@MyAnnotaction("aaa") int i) {
}
}
4、自定义注解的用法三
1、注解
package com.xx.annotate04;
//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
String value() default "abc";
}
2、使用
package com.xx.annotate04;
public class Test01 {
/**
*
* 自定义注解
* 根据我们写的注解可以应用在以下范围上
*
* */
//@MyAnnotaction("aaa")
//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
//您正在为 value 元素提供字符串值 "aaa"。
//因为给了默认值,所以可以有以下写法
//写在方法上
//用value给值
@MyAnnotaction(value="aaa")
public void method02(){
}
//给值
@MyAnnotaction("aaa")
public void method03(){
}
//不给值
@MyAnnotaction()
public void method04(){
}
}
5、自定义注解的用法四
1、注解
package com.xx.annotate05;
//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
//注解多个
String[] value();
}
2、使用
package com.xx.annotate05;
public class Test01 {
/**
*
* 自定义注解
* 根据我们写的注解可以应用在以下范围上
*
* */
//@MyAnnotaction("aaa")
//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
//您正在为 value 元素提供字符串值 "aaa"。
//因为给了默认值,所以可以有以下写法
//写在方法上
//用value给值
@MyAnnotaction(value="aaa")
public void method02(){
}
//给多个值,简易版
@MyAnnotaction({"aaa","bbb","ccc"})
public void method03(){
}
//给多个值,复杂版
@MyAnnotaction(value={"aaa","bbb","ccc"})
public void method04(){
}
}
6、自定义注解的用法五
注解
MyAnnotaction
定义了一个名为name
的元素,这个元素是一个字符串数组(String[]
)。这意味着当您使用这个注解时,需要为name
元素提供一个或多个字符串值。
1、注解
package com.xx.annotate06;
//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
//用name注解多个
String[] name();
}
2、使用
package com.xx.annotate06;
public class Test01 {
/**
*
* 自定义注解
* 根据我们写的注解可以应用在以下范围上
*
* */
//@MyAnnotaction("aaa")
//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
//您正在为 value 元素提供字符串值 "aaa"。
//因为给了默认值,所以可以有以下写法
//写在方法上
//用value给值
@MyAnnotaction(name="aaa")
public void method02(){
}
//给多个值
@MyAnnotaction(name={"aaa","bbb","ccc"})
public void method04(){
}
}
7、自定义注解的用法六
1、注解
package com.xx.annotate07;
//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
//用name注解,用info注释多个,并设置默认值
String name();
String[] info() default "xxx";
}
2、使用
package com.xx.annotate07;
public class Test01 {
/**
*
* 自定义注解
* 根据我们写的注解可以应用在以下范围上
*
* */
//@MyAnnotaction("aaa")
//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
//您正在为 value 元素提供字符串值 "aaa"。
//因为给了默认值,所以可以有以下写法
//写在方法上
//用name和info给值
@MyAnnotaction(name = "aaa",info="xxx")
public void method01() {
}
//name赋值,info使用默认
@MyAnnotaction(name = "aaa")
public void method02() {
}
}
标签:lang,aaa,java,public,第二十四,注解,Java,annotation
From: https://blog.csdn.net/qq_53720725/article/details/139234053