注解
常见注解
@Override//用于检查是否是方法的重写
@Deprecated//将方法修饰为过时方法
@SupperessWarnings("all")//压制警告和压制过时的方法
@FunctionalInterface//用于检查该接口是否为函数式接口
自定义注解
public @interface 注解类名{
public 类型 属性名() default 默认值;
}
特殊属性 value
//如果只有value属性需要赋值,那么可以将"属性名="省略掉
@注解类名(属性值)//省略前是 @注解类名(value="属性值")value的值定义为int类型可以实现改类执行预定义次
public class 类{
}
属性类型
- 基本类型8种
- String
- 枚举
- Class
- 注解类型
- 以上类型的一维数组
使用注解的常用方法
- isAnnotationPresent(注解类型.class) : 判断哪个方法上是否添加了注解
- getAnnotation(注解类型.class) : 返回方法上加的注解对象,如果没有放回null
//定义注解的生命周期
@Retention(RetentionPolicy.RUNTIME)//不加的话,反射无法获取注解对象
public @interface 自定义注解{
}
元注解
最原始的注解,用来控制其他注解的行为
@Inherited : 表示加在父类上的注解能够被子类继承到,仅限于类上的注解
@Retention : 生命周期
- RetentionPolicy.RUNTIME : 在源码有效,在字节码文件中也有效,知道运行期间仍有效
- RetentionPolicy.CLASS : 在源码有效, 在字节码文件中有效(*.java, *.class)
- RetentionPolicy.SOURCE : 仅在源码有效(*.java)
@Target : 控制注解位置
- ElementType.TYPE : 加在类上
- ElementType.METHOD : 加在方法上
- ElementType.FIELD : 加在成员变量上
JUnit 单元测试
以方法为单元来进行测试,便于更好的组织测试代码,还可以进行批量测试
使用步骤
- 加入依赖包
- 手工加
- 可以使用idea 网络版的@Test
- 编写测试类,内部提供测试方法
- 必须是public 修饰
- 必须是无参,无返回值
- 方法上要加@Test
- 运行测试方法
常用注解
- @Test : 用于测试并执行方法
- @Before : 在所有@Test方法之前被执行
- @After : 在所有@Test方法之后被执行
log4J : 日志
System.out.println(“调试信息”);
能够方便的切换程序中的日志输出,并且能够把日志输出信息保存在文件中
优点
- 方便切换
- 永久保存(存入文件中)
- 多线程提高性能
接口
- commons : logging :
- slf4j (简单日志门面 接口) 常用方法
实现
- jdk 自带的日志实现
- log4j : 应用最广的
- log4j2
- logback
使用步骤
- 导入jar包
- 拷贝一个配置文件,log4j.properties(名字固定),位置要放在src目录下
操作日志代码
public class 类名{
//1.使用的是接口 + 工厂的方法,降低耦合性
//2.get Logger 方法的参数是 当前类.class,方便定位这条日志是哪个类输出的
private static final Logger log = LoggerFactory.getLogger(Test2.class);
public static void main(String[] args){
log.debug("");//排除错误,最低级别4
log.info("");//正常的提示信息
log.warn("");//警告信息
log.error("");//错误信息,一般catch捕捉到异常后进行记录
}
}
日志配置
- 日志级别
- 日志输出
- 日志格式
日志配置文件
log4j.rootLogger=debug,my,fileAppender
### direct log messages to my 输出到控制台###
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.ImmediateFlush = true
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern= %d{yyyy年MM月dd日 HH时mm分ss秒} %p [%t] %F %m %n
# fileAppender 输出到本地文件��ʾ
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.ImmediateFlush = true
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=D:/log4j-log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n