Annotation的作用:
不是程序本身,可以对程序作出解释
可以被其他的程序比如编译器等读取
Annotation的使用范围:
在package/class/method/field等都可以使用,相当于给他们添加了额外的辅助信息
内置注解
@override定义在java.lang.override中,这个注解只用于修饰方法,表示一个方法打算重写父类中的该方法
@deprecated定义在java.lang.deprecated中,此注释可以用于修饰方法,属性,类,不建议使用这个
@suppresswarings,定义在java.lang.suppresswarnings中,用来抑制编译时的警告信息
仔细看两个a的颜色不一样,这个注解是为了忽略警告,比如说我定义了一个方法,但是没有用这个方法,报的警告(不是报错)
元注解
元注解的作用是程序员定义自己的注解,java定义了四个标准的meta-annotation类型,他们被用来提供对其他的annotation的类型做说明
这些类型和题目所支持的类在java.lang.annotaion包中可以找到
1.@target 用于描述注解的使用范围,即注解可以被用在什么地方上 比如说 方法
@Target(ElementType.METHOD)
2.@retention,用于描述注解的生命周期
(source>class>reuntime)
定义了source,则在后面两个中也有效
定义了class,则在runtime中有效
3.@document 说明该注解将被包含在javadoc中
avadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。
javadoc命令是用来生成自己API文档的,使用方式:使用命令行在目标文件所在目录输入javadoc +文件名.java。
4.@inherited说明子类可以继承父类的该注解
这四个元注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//测试元注解
public class test02 {
@MyAnnotation
public void aa() {
}
}
//MyAnnotation是test02的内部类
@Retention(value= RetentionPolicy.RUNTIME )//表示运行时有效
@Target(value = ElementType.METHOD)//表示只能用在方法中
@interface MyAnnotation {
}
自定义注解的赋值和默认值
package com.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
public class test03 {
@myannotation2(id=10,name="mike")
public void aaa() {
}
@myannotation3("uuuu")
public void bbb()
{
}
}
@Target(ElementType.METHOD)
@interface myannotation2 { //数据类型 方法名 () 默认值;
String name() default "";
int id() default -1;
int age() default 0;
String[] school() default {"西北大学", "北京大学"};
}
@Target(ElementType.METHOD)
@interface myannotation3 {//当我的注解只有一个属性的时候,最好把这个属性起名叫value,这样赋值的之后就不用写名字了,直接赋值
String value() ;
}