注释:提高程序的可读性,对程序运行没有影响。
注解: 给程序带上一些标记,从而影响编译器运行程序的结果!
注解的作用:
1)可以在程序上(类、方法、属性)携带信息
2) 通过注解简化(取代)配置文件(xml或者properties文件)
1 常见注解
//告诉编译器强制对方法进行覆盖(重写)
@Override
public String toString() {
return super.toString();
}
//告诉编译器压制警告
@SuppressWarnings("rawtypes")
public List save()
{
List list = new ArrayList();
return list;
}
//提示方法过时
@Deprecated
public void update()
{
}
2 注解语法
public @interface Override {
}
3 自定义注解
public @interface Author {
//声明属性
//1)属性的类型可以是基本类型也可以是数组类型
//2)使用default给注解属性一个默认值
// String name();
// String[] name() default "Lynn";
//3)如果属性名称为value的话,在引用的时候可以不写名value
// 一定是第一个。
String value();
}
4 元注解
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
声明注解的使用范围:
TYPE: 注解可以使用在类上
FIELD:成员变量
METHOD:方法
PARAMETER:参数
CONSTRUCTOR: 构造方法
LOCAL_VARIABLE:局部变量
@Retention(RetentionPolicy.SOURCE)
声明注解的有效范围:
RetentionPolicy.SOURCE 注解只要源码中有效。
RetentionPolicy.CLASS 改注解在源码、字节码文件中有效。(默认)
RetentionPolicy.RUNTIME 注解在源码、字节码文件以及运行时有效
5 反射注解
@Author("Lynn")
public void testAnno() throws NoSuchMethodException, SecurityException
{
//1)获取当前方法
Method method = this.getClass().getMethod("testAnno", null);
//2)获取方法上的注解
Author author = method.getAnnotation(Author.class);
//3)获取注解中的属性
String value = author.value();
System.out.println(value);
}
6 单元测试:
单独测试某个方法或者模块。
要求:
1) 依赖JUnit jar包。
2) 方法上要加@Test注解
3) 方法的返回值类型为void
4) 方法是无参数的。
@Test
public void testAnnotation() throws NoSuchMethodException, SecurityException
{
User user = new User();
user.testAnno();
}