注解 annotation基础语法

什么是注解?

Annotation是从JDK5.0开始引入的新技术。

Annotation的作用:

  - 不是程序本身,可以对程序作出解释。

  - 可以被其他程序(比如编译器)等读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)

Annotation的格式:

  -可以是“@注释名”在代码存在的,还可以添加一些参数值,例如:@SuppressWarning(value="unchecked")。

Annotation在哪里使用

  - 可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问

Java中常用的内置注解

 - @Override

   定义在java.lang.Override中,此注释只适合用于修饰方法,表示一个方法声明在打算重写超类的另外一个方法声明

 - @Deprecated

   定义在java.lang.Deorecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

  - @SuppressWarnings

   定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息

   使用该注解的时候需要添加一个参数才能正确使用,这些参数值都是定义好的,如下

   

自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口

 要点:
 - @interface用来声明一个注解
 格式为:
- public @interface 注解名 {定义体}
- 其中的每一个方法实际上是声明了一个配置参数。
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)
- 可以通过default来声明参数的默认值。
- 如果只有一个参数成员,一般参数名为value


 注意:
注解元素必须要有值。我们定义注解元素时,经常使用空字符串、0作为默认值。
也经常使用负数(比如:-1)表示不存在的含义

元注解

元注解的作用就是负责注解其他注解。 Java定义了4个标准的
meta-annotation类型,它们被用来提供对其它 annotation
类型作说明。
•这些类型和它们所支持的类在java.lang.annotation包中可以找到
- @Target
- @Retention
- @Documented
- @Inherited

常用的两个是@Target,@Retention

@Target

作用:

  - 用于描述注解的使用范围(即:被面熟的注解可以用在什么地方)

@Retention

作用:

 - 表示需要在什么级别保存该注释信息,用户描述注解的生命周期

举例:

package com.choi.java.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//自定义一个注解

@Target(value={ElementType.METHOD,ElementType.TYPE}) //声明注解的使用范围
@Retention(RetentionPolicy.RUNTIME)  // 声明注解的声明周期
public @interface MyAnnotation01 {

	String studentName() default "";  //注意“studentName()”不表示方法
	int age() default 0;
	int id() default -1;
	String[] schools() default {"AA","BB"};
	
}
package com.choi.java.annotation;

@MyAnnotation01
public class Demo01 {

	@MyAnnotation01(age=19,studentName="菜菜",id=1001,
			schools={"aa","vv"})
	public void test(){
	}
	
	public void test1(){
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37858042/article/details/84843775
今日推荐