目录
1.1 注解,或者叫注释类型,英文单词是Annotation
1.2 注解Annotation是一种引用类型。编译之后也是生成xxx.class文件
1、注解
1.1 注解,或者叫注释类型,英文单词是Annotation
1.2 注解Annotation是一种引用类型。编译之后也是生成xxx.class文件
1.3 怎么自定义注解呢?语法格式?
@interface 注解类型名{ }
1.4 注解怎么使用?用在什么地方?
-
注解使用时的语法格式为:@注解类型名
-
注解可以出现在类上、属性上、方法上、变量上等……还可以出现在注解类型上
1.5 JDK内置了那些注解?
1.6 元注解
用来标注“注解类型”的 “注解” 叫做“元注解”
注解(动词)注解(名词)的 注解(名词) 叫做“元注解”
常见的元注解有哪些?
-
Target注解:用来标注“注解类型”的“注解”,这个Target注解用来标注“被标注的注解”可以出现在哪些位置上?
-
@Target(ElementType.METHOD):表示“被标注的注解”只能出现在方法上
-
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}):表示该方法可以出现在:构造方法上,字段是,局部变量上,方法上,类上……
-
-
Retention注解:用来标注“注解类型”的“注解”,这个Retention注解用来标注“被标注的注解”最终保存到哪。
-
@Retention(RetentionPolicy.SOURCE):表示该注解只被保留在java源文件中
-
@Retention(RetentionPolicy.CLASS):表示该注解只被保存在class文件中
-
@Retention(RetentionPolicy.RUNTIME):表示该注解只被保存在class文件中,并且可被反射机制读取
-
/*
@Override这个注解只能注解方法
@Override这个注解是给编译器参考的,和运行阶段没关系
凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写,则编译器报错
*/
//@Override
public class AnnotationTest02 {
// @Override
private int no;
@Override
public String toString(){
return "toString";
}
}
自定义注解:
public @interface MyAnnotation {
/*
我们通常在注解中可以定义属性值,一下这个是MyAnnotation的name属性
看着像一个方法,但实际上我们称之为属性name
*/
String name();
//颜色属性
String color();
//年龄属性
int age() default 25;
}
public class AnnotationTest03 {
public static void main(String[] args) {
//在本类中执行过时的方法,编译器不报过时信息,且不显示下划线
AnnotationTest03 test03 = new AnnotationTest03();
test03.doSome();
}
@Deprecated
public void doSome(){
System.out.println("do something!");
}
@Deprecated
public static void doOther(){
System.out.println("do other……");
}
}
// //在其他类中执行过时的方法,编译器报过时信息,且显示下划线
class T{
public static void main(String[] args) {
AnnotationTest03 test03 = new AnnotationTest03();
test03.doSome();
AnnotationTest03.doOther();
}
}
测试:
public class MyAnnotationTest {
//报错的原因:如果一个注解当中有属性,那么必须给属性赋值
/* @MyAnnotation
public void doSome(){
}*/
//解决:指定name属性的值就好了
//@MyAnnotation(属性名 = 属性值,属性名 = 属性值,属性名 = 属性值)
//如果只有一个属性,且属性名为value,则属性名可以省略
@MyAnnotation(name = "zhangsan",color = "black")
public void doSome(){
}
}
注解当中的属性可以是哪种类型?
属性类型可以是:byte、short、int、long、float、double、boolean、char、String、Class、枚举类型以及以上每一种的数组形式
如果数组中只有一个元素:大括号可以省略
1.7 注解在开发中有什么用?
注解在开发中等同于一种标记
如果元素上没有这个标记怎么办,如果有这个标记怎么办