java注解定义类型变量_Java注解的定义和使⽤
注解也叫元数据,⼀种代码级别的说明。是jdk1.5后产⽣的⼀个特性,与类、接⼝、枚举同⼀个档次,他可以在包、类、字段、⽅法、局部变量、⽅法参数等的前⾯,⽤来对这些元素进⾏说明、注释;
注解分类
编写⽂档:通过代码⾥的标识的注解⽣成⽂档(⽣成word⽂档)
编译检查:通过代码⾥的标识的注解让编译器能够实现基本的编译检查
代码分析:通过代码⾥标识的注解对的代码进⾏分析(使⽤反射) 【重点】
注解可以在类、变量、⽅法、接⼝上使⽤
注解也有⽣命周期
⼀个⽅法上、⼀个变量上、⼀个类上,可以使⽤多个注解
JDK中内置的注解
@Deprecated:⽤来修饰已经过时的⽅法。编译期注解,提⽰该⽅法或者该成员变量已经过期,不建议使⽤,但是还是能使⽤的,会在使⽤到该⽅法 或者该变量会有个横线,能⽤到(类、变量、⽅法)
@Override:⽤来修饰此⽅法重写了⽗类的⽅法 只能在⽅法上
@SuppressWarnings:⽤来通知java编译器禁⽌特定的编译警告
@SuppressWarnings("unused")
⾃定义注解
parameter是什么意思啊通过@interface 关键字进⾏定义
public @interface 注解名称{
}
使⽤注解、在类上使⽤的列⼦
@注解名称
public class Test {
}
元注解
元注解是可以注解到注解上的注解,或者说元注解是⼀种基本注解,但是它能够应⽤到其他的注解上⾯。
元注解有@Retention、@Documented、@Target、@Inherited、@Repeatable这5个
两个类型⼀样的注解不能同时⽤
@Retention【重点】
Retention 意思是保留期的意思,当@Retention应⽤到⼀个注解上的时候,它解释说明了这个注解的存活时间
值描述
RetentionPolicy.SOURCE
注解只在源代码阶段博保留,在编译器进⾏编译时将会被丢弃忽视RetentionPolicy.CLASS
只被保留在编译进⾏的时候,并不会加载到JVM中
RetentionPolicy.RUNTIME
可以保留到程序运⾏时,它会被加载到JVM中,所以可以获取到他们RetentionPolicy是⼀个枚举类
代码演⽰:
@Retention(RetentionPolicy.RUNTIME)//定义⼀个运⾏期有效的注解
public @interface MyAnnotation {
}
@Target【重点】
⽬标的意思,@Target指定注解运⽤的地⽅
ElementType.ANNOTATION_TYPE:可以给注解进⾏注释
ElementType.CONSTRUCTOR:可以给构造⽅法注解
ElementType.FIELD:可以给属性进⾏注解
ElementType.LOCAL_VARIABLE:可以给局部变量进⾏注解
ElementType.METHOD:可以给⽅法进⾏注解不能⽤在构造⽅法上
ElementType.PACKAGE:可以给包进⾏注解
ElementType.PARAMETER:可以给⼀个⽅法内的参数进⾏注解ElementType.TYPE;可以给⼀个类型进⾏注解,⽐如类、接⼝、枚举
代码实例:
//该注解可在 类 接⼝、枚举、⽅法、成员变量使⽤
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD}) @MyAnnotation
public class Student {
@MyAnnotation
@MyAnnotation
public void test() {
}
}
@Inherited
表⽰该注解能被⼦类使⽤(继承)
注解MyAnnotation被@Inherited修饰,如果有个类A使⽤了@MyAnnotation注解,⼜有⼀个⼦类b继承了A,在b中也能使⽤
@MyAnnotation注解
@Documented
这个注解和⽂档有关,它能将注解中的元素包含到Javadoc中
@Repeatable
在需要对同⼀个注解多次使⽤在⼀个类、接⼝、⽅法、属性等上⾯的时候,需要⽤@Repeatable
注解的属性
注解的属性也叫成员变量,注解中只有成员变量,⽆成员⽅法
注解的成员变量在注解的定义以⽆参数的⽅法的形式来声明。其⽅法名定义了该成员变量的名字,其返回值定义了该成员变量的类型@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
public @interface MyAnnotation {
//注解中只有成员变量,⽆成员⽅法
int id() default 0;
String username() default " ";
}
这⾥的default给该变量id和username设置了默认值
在Student类中⽤了该注解的⽅法可以给该注解中的变量赋值,如果注解没有设置默认值,则在引⽤该注解的时候必须给该注解赋值public class Student {
@MyAnnotation(id = 12, username ="⼩飞龙" )
int age;
@MyAnnotation
public void test01() {
}
@MyAnnotation(id = 55)
public void test02() {
}
}
当注解中只有⼀个变量的时候(也就是只有⼀个⽆参⽅法的时候)可以这样写
注解中的代码:
public @interface MyAnnotation {
//注解中只有成员变量,⽆成员⽅法
String value() default " ";
}
Student代码:
public class Student {
@MyAnnotation("张三")
public void test01() {
}
// @MyAnnotation(value = "李四")等价 @MyAnnotation("张三")
@MyAnnotation(value = "李四")
public void test02() {
}
}
在这⾥@MyAnnotation(value = "李四")等价 @MyAnnotation("张三"),都是给value赋值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论