目录
注解
概述:
注释:解释说明代码,给程序员看的
注解:对代码进行解释说明,给计算机看的
自定义注解:
格式:
public @interface 注解名{
//属性列表
//属性的格式 数据类型 属性名() [default 默认值];
}
属性的数据类型:
a. 基本数据类型都支持(byte short char int float double boolean long)
b. String
c. 枚举
d. Class
e. 注解
f. 以上类型的一维数组
//自定义注解
public @interface Anno {
//基本数据类型(包括byte short char int float double boolean long)都支持
public abstract int age() default 45;
//String
public abstract String name() default "战三";
//一维数组
public abstract int [] arr() default {1,2,3,5,5,6,5,4};
//String
public abstract String value();
//Class
public abstract Class clazz() default Anno2.class;
//枚举
public abstract Season SPRING() default Season.SPRING;
//注解
public abstract Anno2 anno() default @Anno2;
}
//枚举类
enum Season {
AUTUMN, SPRING, SUMMER, WINTER;
}
//注解类
public @interface Anno2 {
}
使用注解
@注解名(属性名=值,属性名=值...)
//@Anno(name = "哈哈哈")
@Anno("巴拉巴拉地")
@Deprecated
public class AnnoDemo {
}
注解使用细节
a. 如果给一个数组类型的属性赋值,并且只有一个元素,那么{}可以省略
b. 如果只需要给一个属性赋值,并且该属性的名字为value,那么 value=可以省略
注解的本质
注解其实就是个接口,注解中的属性,本质上就是抽象方法,所有的注解,都默认继承自
源码:
java.lang.annotation.Annotation
public interface MyAnno1 extends java.lang.annotation.Annotation {
public abstract int age();
}
元注解
概念:jdk提供的,用来修饰其它注解的注解
组成:
@Target:当前这个注解可以用在那些地方
ElementType.TYPE:Anno这个注解可以使用到类上
ElementType.METHOD:Anno这个注解可以使用在方法上
ElementType.FIELD:Anno可以使用在成员变量上
ElementType.PARAMETER:Anno这个注解可以使用在参数上
@Retention:当前这个注解可以在那些阶段保留(默认是源码阶段)
有三种阶段:源码、字节码、运行时
RetentionPolicy.RUNTIME:运行时
RetentionPolicy.CLASS:字节码
RetentionPolicy.SOURCE:源码
@Inherited:当前注解是否可以被子类继承
@Documented:当前注解是否可以被抽取到帮助文档中
@Couple(man="班长",women="翠花")
public class Test {
public static void main(String[] args) {
Class<Test> clazz = Test.class;
boolean flag = clazz.isAnnotationPresent(Couple.class);
if(flag){
Couple couple =(Couple) clazz.getAnnotation(Couple.class);
String man = couple.man();
String women = couple.women();
System.out.println(man + "和" +women+"结婚了");//班长和翠花结婚了
}
}
}
//@Target:当前这个注解可以用在那些地方
@Target(ElementType.TYPE)
//@Retention:当前这个注解可以在那些阶段保留(默认是源码阶段)
@Retention(RetentionPolicy.RUNTIME)
//自定义注解类
@interface Couple {
String man();
String women();
}
junit-单元测试
任何应用程序,在正式发布之前,都需要经过测试,确定应用程序的功能能够满足程序设计的要求。
每个应用程序的都有很多功能,代码也会有很多,少则几万行,多则数十万行。如果等所有的功能都开发完毕,再进行测试,一旦出了bug,由于代码错综复杂,很难排查问题。
所以,实际开发中,需要以功能为单位,设计测试。每写完一个功能,就对这个功能的完整性进行测试,如果所有的功能测试都没有问题,那么整个应用程序就没有问题