注解

常见注解
@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