1.注解:
注释是给程序员看的,为了说明代码的用途,增强代码的可读性。
注解是给编译器看的,为实现了某些功能,保证代码的正确性。
目的:
1、对代码进行规范
2、替代XML
2.使用注解:
在类、方法、语句上,添加以@开头的注解名称,可以以小括号设置一些属性
有哪些注解可以使用:
JDK中的三个基本注解:
1.@Override:被此注解修饰的方法必须是重写父类或实现接口,如果不是则报编译错误。
2.@Deprecated:被此注解修饰的方法为已过期,为了声明某些陈旧的方法,提醒使用者尽量不要再使用。
3.@SuppressWarnings:抑制警告
(属性值all,unused,rawtypes,deprecation/unchecked/null)
3.开发一个注解( @interface annotation):
public @interface 注解名{
public String name1();//普通属性在使用时必须进行赋值
public String id default “xx”;可以给属性设置默认值
public String value();//如果属性名为value,且在使用时只对此属性赋值则属性名可省略
}
注释中允许使用的属性的类型:字符串,八个基本类型,注解,类对象(Class),枚举。以上类型的一维数组。
仿JUNIT的注解及其功能
1 需求分析
模拟JUNIT的@Test注解来实现,被@Test注解所修饰的方法可以被运行。
2 技术分析:
什么是JUNIT:是一个Java执行单元测试的工具,Eclipse中默认支持此工具。
开发注解:public @interface xxx{}
反射:Class.getMethods()得到指定类中的所有方法对象
方法对象Method.isAnnotationPresend( Anno.class )判断当前方法是否有指定的注解修饰。
运行方法Mehtod.invoke
元注解:修饰注解的注解。@Retention(RetentionPolicy.RUNTIME)
注解的有效范围:
SOURCE:源代码(默认的级别)
CLASS:字节码
RUNTIME:运行时
3 步骤分析:
一、创建一个注解,名字MyTest,不需要属性。
二、创建一个测试类,编写一些方法,方法必须为公有、无返回值、无参。一部分方法由MyTest注解修饰。
三、编写测试用的main方法,得到测试类的类对象。
四、使用getMethods得到所有方法对象
五、对方法对象集合进行遍历
六、判断每个方法上是否有MyTest注解修饰
七、如果有,则调用此方法
4 代码实现
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyJunit {
}
public class Student {
@MyJunit
public void run1() {
System.out.println("run1...");
}
public void run2() {
System.out.println("run2...");
}
@MyJunit
public void run3() {
System.out.println("run3...");
}
}
import java.lang.reflect.Method;
public class testJunit{
public static void main(String[] args) throws Exception {
Class clazz = Student.class;
Object stu = clazz.newInstance();
Method[] methods = clazz.getMethods();
for(Method method:methods) {
if (method.isAnnotationPresent(MyJunit.class)) {
method.invoke(stu);
}
}
}
}